首先,以下语句是OK的:
SQL> select max('a') from dual;
 
MAX('A')
--------
a问题来了,以下语句居然会报错,谁能帮忙解释一下:
SQL> declare
  2  v_a varchar2(100);
  3  begin
  4  select max('a') into v_a from dual;
  5  end;
  6  / 
ORA-06502: PL/SQL: 数字或值错误 :  字符串缓冲区太小
ORA-06512: 在 line 5
 

解决方案 »

  1.   

    我把你的语句 放到pl/sql 里执行没问题啊
      

  2.   

    应该是触发了oracle的什么版本bug了我在10.2.0.1上试验,报的错误和你一样
    但在10.2.0.5上试验,没报错
      

  3.   

    我原来也是在存储过程里的,会出现这个问题,除非加上其他函数,比如trim。select max(trim('a')) into v_a from dual;而且是char类型就有问题,其他都没有。
      

  4.   

    这就对头鸟,就是版本bug鸟我写的版本号 最后的 .0  没写
    10.2.0.1.0
    10.2.0.5.0如果没有版本升级计划,加个 trim 屏蔽一下吧先
      

  5.   

    最新发现,如果在存储过程中直接传给输出参数,也不会出错
    create or replace procedure test(b out varchar2) is
    begin
      select max(t.a)
        into b
        from t;
    end test;