NB的错误!!!

不剪发的Tony老师
数据库领域优质创作者
博客专家认证
2012-08-22 08:59:42
首先,以下语句是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
...全文
146 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

这就对头鸟,就是版本bug鸟

我写的版本号 最后的 .0 没写
10.2.0.1.0
10.2.0.5.0

如果没有版本升级计划,加个 trim 屏蔽一下吧先

引用 4 楼 的回复:

我的版本是10.2.0.1.0
[/Quote]只能先这样了
BenChiM888 2012-08-22
  • 打赏
  • 举报
回复
这就对头鸟,就是版本bug鸟

我写的版本号 最后的 .0 没写
10.2.0.1.0
10.2.0.5.0

如果没有版本升级计划,加个 trim 屏蔽一下吧先

[Quote=引用 4 楼 的回复:]

我的版本是10.2.0.1.0
[/Quote]
  • 打赏
  • 举报
回复
我的版本是10.2.0.1.0
  • 打赏
  • 举报
回复
我原来也是在存储过程里的,会出现这个问题,除非加上其他函数,比如trim。

select max(trim('a')) into v_a from dual;

而且是char类型就有问题,其他都没有。
BenChiM888 2012-08-22
  • 打赏
  • 举报
回复
应该是触发了oracle的什么版本bug了

我在10.2.0.1上试验,报的错误和你一样
但在10.2.0.5上试验,没报错

槑党--一缕风 2012-08-22
  • 打赏
  • 举报
回复
我把你的语句 放到pl/sql 里执行没问题啊
  • 打赏
  • 举报
回复
最新发现,如果在存储过程中直接传给输出参数,也不会出错
create or replace procedure test(b out varchar2) is
begin
select max(t.a)
into b
from t;
end test;

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧