null 之 parameter

用惯了ms sql server 的也习惯了 ms sql server 的思维,结果这次在项目上栽了个大跟斗。

1、ms sql 中 null 与 ""在数据库中都有可能存在的,即:

  code字段有可能是"",同时也有可能是null

  但是oracle中这与之不然,当我们在更新oralce数据的时候,传入的code字段为""的时候,db在保存时会自动转换为null,这个在ms sql中是不会自动转换的。

2、 ms sql 中当字段code 为null时候,我们可以这样写 WHERE [code]=null 或者这样写 WHERE [code] IS NULL ,之只不过这样执行有个前提要设置 ANSI_NULLS 

SQL-92 标准要求对空值的等于 (=) 或不等于 (<>) 比较取值为 FALSE。当 SET ANSI_NULLS 为 ON 时,即使 column_name 中存在空值,使用 WHERE column_name = NULL 的 SELECT 语句仍返回零行。即使 column_name 中存在非空值,使用 WHERE column_name <> NULL 的 SELECT 语句仍返回零行。

当 SET ANSI_NULLS 为 OFF 时,等于 (=) 和不等于 (<>) 比较运算符不遵从 SQL-92 标准。使用 WHERE column_name = NULL 的 SELECT 语句返回 column_name 中含有空值的行。使用 WHERE column_name <> NULL 的 SELECT 语句返回列中含有非空值的行。此外,使用 WHERE column_name <> XYZ_value 的 SELECT 语句返回所有非 XYZ 值和非 NULL的行

但是,在oracle中这个是行不通的.

3、 ms sql 中可以在WHERE后面使用 CASE ... WHEN ....,而oracle 不支持

既然,ms sql 与 oracle 出现了这些差别,那么肯定会对我们的编程带来一定的影响。

当我们要传递一个参数为给db,而这个参数刚好是null ,或者是'',在sql中可以使用CASE ... WHEN ....来出来

而在oracle中呢?

我百般无赖之下,用上了NVL:

   NVL(mark_no,:Code) =:Code

这样就ok了

如果各位朋友还有其他好的方案,请告知。

posted on 2009-11-24 01:01  persialee  阅读(257)  评论(0)    收藏  举报

导航