java.sql.SQLException:ORA-06502:PL/SQL:数字或值错误:字符串缓冲区太小 
ORA-06512: 在 "SYSTEM.QCBBM_GHBH", line 7 
ORA-06512: 在 line 1
请高手帮忙看一下:下面是我的存储过程
create or replace procedure QCBBM_GHBH(ghbh OUT CHAR) AS
ls_maxbh_t CHAR(100);
ls_maxbh CHAR(100);
ls_max CHAR(100);BEGIN
      select max(qybh) into ls_maxbh_t from hc_qychd where qybh like 'CM0%';
      select max(ghbh) into ls_maxbh from hc_ghjld_t where ghbh like 'CM0%';      if ls_maxbh_t>=ls_maxbh then
                      ls_max:=ls_maxbh_t; 
      end if;
      if ls_maxbh_t<ls_maxbh then
                      ls_max:=ls_maxbh;
      end if;
      if ls_maxbh_t is null then 
                      ls_max:=ls_maxbh;
      end if;
      if ls_maxbh is null then 
                      ls_max:=ls_maxbh_t;
      end if;
      ghbh:=trim(ls_max);
END QCBBM_GHBH;我在表中看了qybh是CHAR(11),ghbh也是CHAR(11),我再网上查过了,说是声明的变量长度短了,所以我就把ls_maxbh_t 和ls_maxbh ls_max变量从CHAR(11)该成CHAR(100)了 但是现在错误依旧,请高手帮帮我

解决方案 »

  1.   

    看你的过程 一条SQL不就可以搞定了 至于这么大费周折的么SELECT MAX(BH)
    FROM 
    (select max(qybh) BH  from hc_qychd where qybh like 'CM0%'
    UNION ALL
      select max(ghbh) BH  from hc_ghjld_t where ghbh like 'CM0%'
    )
      

  2.   

    再加个trim函数
    trim(max(bh))
      

  3.   

    2楼的大哥给提的建议不错,的确是trim(max(bh)) 之后就把问题解决了。原因是我写存储过程时声明的bh为 VARCHAR(50),而数据库表中的GHBH字段是VARCHAR(20),我定义的太大了,后面多了30个空格,用trim(BH)去点空格问题就解决了!多谢jym2002!