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了
如果各位朋友还有其他好的方案,请告知。
浙公网安备 33010602011771号