Oracle10g(10.2.0.1)的一个bug,将MAX/MIN函数的结果输出到一个字符变量时报错:
ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小。
测试代码如:
ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小。
测试代码如:
SQL
>
SQL > declare
2 vStr varchar ( 20 );
3 begin
4 select max ( ' a ' ) into vStr from dual;
5 end ;
6 /
declare
vStr varchar ( 20 );
begin
select max ( ' a ' ) into vStr from dual;
end ;
ORA - 06502 :PL / SQL:数字或值错误:字符串缓冲区太小
ORA - 06512 :在line 5
SQL >
SQL > declare
2 vStr varchar ( 20 );
3 begin
4 select max ( ' a ' ) into vStr from dual;
5 end ;
6 /
declare
vStr varchar ( 20 );
begin
select max ( ' a ' ) into vStr from dual;
end ;
ORA - 06502 :PL / SQL:数字或值错误:字符串缓冲区太小
ORA - 06512 :在line 5
SQL >
这个BUG实在太明显了,在10.2.0.2中已经修复了,bug Number 4458790
10.2.0.2 | 4458790 + | ORA-6502 selecting MAX/MIN into a CHAR variable in PLSQL |
如果不想升级可以加to_char函数,改成如下:
SQL
>
SQL > declare
2 vStr varchar ( 20 );
3 begin
4 select to_char( max ( ' a ' )) into vStr from dual;
5 end ;
6 /
PL / SQL procedure successfullycompleted
SQL >
SQL > declare
2 vStr varchar ( 20 );
3 begin
4 select to_char( max ( ' a ' )) into vStr from dual;
5 end ;
6 /
PL / SQL procedure successfullycompleted
SQL >