表test,有个字段a,char(30),一条记录是'你好后面有空格             '(他会后补空格到30位)
直接用sql查询select * from test where a='你好后面有空格',可以返回记录
但是放到存储过程中就没有记录open v_cur for
select * from test where a=v_a;其中v_cur是输出cursor,v_a是输入,值为你好后面有空格,后面不带空格
真急人啊,怎么没有记录啊另外不能用trim(a)这样子,表A是上千万上亿的数据量,用trim做查询要全表扫描,肯定死翘翘

解决方案 »

  1.   

    可以在伪列 trim(a) 上建一个索引,满足你用trim
      

  2.   

    这种问题最麻烦了,把char改成varchar2吧
    alter table test modify (a varchar2(30));
      

  3.   


    oracle1的文档上都是建议把char改成varchar2的
    lz也改一下吧
      

  4.   

    成千万上亿的表,表名叫test,用char存储字符,对吧。那急个毛啊。
      

  5.   

    建议修改字段的数据类型 char-->varchar2在确定数据的长度的话用char,效率高;
    不确定数据的长度用varchar2,节省空间。
    现在都是说以空间换时间,char和varchar2用哪个好?高人指点一下