oracle存储过程中的max或min语句执行报错

chenhuizhouhb 2016-04-01 10:21:30
项目中的存储过程以前没有问题,最近客户反应没有生成正确的费用信息,查询数据库中的存储过程才发现,根本就不能正常的执行,其他语句还好!就是执行例如下边的语句就会报错(字符串缓冲区太小)
tab1表中的hksj字段是char(10),我定义的测试存储过程如下:
create or replace procedure ZZ_12 IS
v_hksj char(10);
BEGIN
select max(hksj) into v_hksj from tab1 where id=1483;
END;
下边这条语句报错!!!!!ora_06502
select max(hksj) into v_hksj from tab1 where id=1483;
如果把这条语句复制到pl/sql的sql窗口中执行不会报错!
select max(hksj) from tab1 where id=1483;
太郁闷了!急急急!高手进!
...全文
489 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenhuizhouhb 2016-04-20
  • 打赏
  • 举报
回复
各位大侠,问题已解决主要方法: 1、不能修改表结构,因为是成熟系统不能因为解决一个问题,引出更多的问题。 2、奇怪的是之前的这个存储过程运行一年都是正常的,怎么突然就报错呢?我查看了表空间发现已经快到了极限了,但是有自动扩展表空间的设置。百思不得其解。。。 3、重启应用、数据库服务器、重启iis服务问题依然。。。 4、修改指定的语句吧,这是我不想干的事。将变量设置成nvarchar2(10)问题解决了
hanyuetaxue 2016-04-09
  • 打赏
  • 举报
回复
数据类型不兼容 v_hksj char(10);与列的hksj 是否相同的字段类型 select max(hksj) into v_hksj from tab1 where id=1483;
寡丶人 2016-04-05
  • 打赏
  • 举报
回复
在sql窗口中,你的查询是没有错的。 在command中,你把查询修的值赋给变量char(10),这里错了,你可以把值设的大一些,应该就不会报错。
zkzhong 2016-04-05
  • 打赏
  • 举报
回复
一.如果是用户数据,则更改用户表,或者数据 二.如果是oracle系统表,则使用如下语句关系统系统触发器: alter system set "_system_trig_enabled"=false;
bo871747022 2016-04-05
  • 打赏
  • 举报
回复
最可能就是变量v_hksj长度不够,别的看不出来什么,你改长点试试。
chenhuizhouhb 2016-04-04
  • 打赏
  • 举报
回复
怎么没有人回答呀,自己顶一下
lhdz_bj 2016-04-02
  • 打赏
  • 举报
回复
应该还是变量的类型和宽度不合适造成的,改成varchar2(100)试试。

17,082

社区成员

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

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