|
原帖由 regonly1 于 2010-7-23 15:41 发表
我的理解null是一种数据存在性的判断,或者说是数据的一种状态
即数值为空(is null)或者为非空(is not null),所以谈不上什么类型不类型
就比如说有三个容器,一个是空气、一个是水、一个是真空
空气的类型是气体,水的类型是液体,那真空是什么类型呢?
不能这么说,NULL是有类型的啊,比如a varchar2(10):=null;这个null就是varchar2(10)的类型,比如select null from dual;这个literal null就是没有类型的
没有类型的在动态sql绑定变量的时候不能用的,比如
SQL> declare
2 v_sql varchar2(100);
3 v_cnt number(10);
4 begin
5 v_sql:='select count(*) from all_objects where object_name=:1';
6 execute immediate v_sql into v_cnt using null;
7 dbms_output.put_line(v_cnt);
8 end;
9 /
declare
v_sql varchar2(100);
v_cnt number(10);
begin
v_sql:='select count(*) from all_objects where object_name=:1';
execute immediate v_sql into v_cnt using null;
dbms_output.put_line(v_cnt);
end;
ORA-06550: 第 7 行, 第 43 列:
PLS-00457: 表达式必须是 SQL 类型
ORA-06550: 第 7 行, 第 2 列:
PL/SQL: Statement ignored
SQL>
SQL> declare
2 v_sql varchar2(100);
3 v_cnt number(10);
4 v_bind varchar2(10):=null;
5 begin
6 v_sql:='select count(*) from all_objects where object_name=:1';
7 execute immediate v_sql into v_cnt using v_bind;
8 dbms_output.put_line(v_cnt);
9 end;
10 /
0
PL/SQL procedure successfully completed
第1个字面量null没有类型所以报错,第2个是有类型的null,或者using to_char(null)也是可以的 |
|