我就是想在存储过程中写一个 不为空 同时不为NULL的语句!
都有什么好方法呢?
我看到一个帖子,说:
if nvl(strsql, '') <> '' then
end if
不过那人说这个要慎重使用(原因如下):
[php]
SQL> var a varchar2(10);
SQL> exec :a := '';
PL/SQL 过程已成功完成。
SQL> select case when nvl(:a, 'null') = 'null' then 'null' else 'not null' end from dual;
CASEWHEN
--------
null
SQL> select case when nvl(:a, 'null') <> 'null' then 'not null' else 'null' end from dual;
CASEWHEN
--------
null
SQL> select case when nvl(:a, '') <> '' then 'not null' else 'null' end from dual;
CASEWHEN
--------
null
SQL> select case when nvl(:a, '') = '' then 'null' else 'not null' end from dual;
CASEWHEN
--------
not null
SQL>[/php]
Oracle 中,空字符串存入到Oracle中会自动转换为NULL,另外VARCHAR2把空串等同于null处理。 SQL> select 1 from dual where null=null; 没有查到记录 SQL> select 1 from dual where null=''; 没有查到记录 SQL> select 1 from dual where ''=''; 没有查到记录 SQL> select 1 from dual where null is null; 谢谢 @geass 的回复!
Oracle 中,空字符串存入到Oracle中会自动转换为NULL,另外VARCHAR2把空串等同于null处理。 SQL> select 1 from dual where null=null; 没有查到记录 SQL> select 1 from dual where null=''; 没有查到记录 SQL> select 1 from dual where ''=''; 没有查到记录 SQL> select 1 from dual where null is null;
谢谢 @geass 的回复!
varchar2 会把 NULL 也当成 '' 只要判断 是否为空就可以。
select case when '' is null then '等' else '不等 ' end from dual select case when null is null then '等' else '不等 ' end from dual --都会输出等于 : 为什么? 难到空字符串也当成null了么?
select case when null = null then '等' else '不等 ' end from dua select case when '' = '' then '等' else '不等 ' end from duall --这两个都输出“不等” ; 为什么? 难道和case用法有关么? 求原理!
求解释!
@imefong: 之前的回复有误,Oracle 中,空字符串存入到Oracle中会自动转换为NULL,另外VARCHAR2把空串等同于null处理。
SQL> select 1 from dual where null=null; 没有查到记录
SQL> select 1 from dual where null=''; 没有查到记录
SQL> select 1 from dual where ''=''; 没有查到记录
SQL> select 1 from dual where null is null;