一个存储过程,参数值是空格,但到过程里就变成null了?这是为什么啊?这样插入表就出错了,因为那个表列不能为null.难道oracle 就不能传递空格参数???全部被剔除?????

解决方案 »

  1.   

    nvl(列名," ")
    这样不知道行不行
      

  2.   

    存储过程和调用语句贴出来
    应该不会出现这种情况,是不是被trim了
      

  3.   

    create or replace procedure hah(ab in varchar) is
    begin
         if ab = ' ' then 
            dbms_output.put_line('空格');
         elsif ab is null then 
            dbms_output.put_line('null');
         else 
            dbms_output.put_line('非空格');
         end if;
     end hah;SQL> set serveroutput on 
    SQL> exec hah('');nullPL/SQL procedure successfully completedSQL> exec hah(' ');空格PL/SQL procedure successfully completedSQL> exec hah('a');非空格PL/SQL procedure successfully completed看看这个过程,应该对你的理解有帮助
      

  4.   

    也就是说,直接传入 ''的时候,系统认为是null;
    ' ',有明确的空格动作,才是空格
      

  5.   

    参数类型是varchar 还是char ? varchar的话会好像自动把头尾的空格去掉,这样就成了null,char的话应该不会
      

  6.   

    数据是varchar类型,用ado调用的,空格是会被截取掉!
      

  7.   


    传入参数为一定数量的空格,此时结果不是null,传入什么是什么。SQL> exec hah('         ');
     
    非空格长度为9
     
    PL/SQL procedure successfully completed
      

  8.   


    '' 就是 null你可以试试查询SQL> select 1 from dual where '' = '';未选定行SQL> select 1 from dual where '' is null;         1
    ----------
             1SQL> select 1 from dual where '' = null;未选定行
      

  9.   

    怎么会呢,jdsnhan已经给出了说明
    我也试了,绝对可行
      

  10.   

    传入'  '中间带几个空格字符,就可以搞定了!然后在oralce里面用trim函数就还原成''啦吧!