求救pl/sql 游标 数据缓冲区太小异常

q6413260 2014-01-05 09:28:53
DROP TABLE PRODUCTINFO_TMP;
CREATE TABLE PRODUCTINFO_TMP AS SELECT * FROM
productinfo WHERE 1=2;
ALTER TABLE PRODUCTINFO_TMP MODIFY category VARCHAR2(4000);
CREATE OR REPLACE PROCEDURE TEST123 AS
CURSOR cur_categoryinfo IS SELECT * FROM categoryinfo
WHERE categoryname IN('MP3','ROUTER','WASHING MACHINE','TV');
CURSOR cur_productinfo(category_id VARCHAR) IS SELECT * FROM productinfo
WHERE productprice >1000 AND origin IN('CHINA','HANGZHOU')
AND category = category_id;
BEGIN
<<outer>>
FOR cur_cate IN cur_categoryinfo LOOP
<<inner>>
FOR cur_pro IN cur_productinfo(cur_cate.categoryid) LOOP
-- cur_pro.category := cur_cate.categoryname;
IF cur_pro.productprice>2000 THEN
cur_pro.productprice := cur_pro.productprice*0.95;
END IF;
-- insertinto productinfo_tmp values cur_pro;
INSERT INTO productinfo_tmp(productid,productprice,category)
VALUES (cur_pro.productid,cur_pro.productprice,cur_cate.categoryname);
END LOOP inner;
END LOOP outer;
COMMIT;
END;
/

本来我用的是这两个注释掉的source,但在第一个注释的地方,运行几次循环后就报如下异常了
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
我是想把本来是种类id(数字形式)存储的换成种类名字,我看了下id和名字都是varcha2的,并且我上面声明了4000,为什么还会报错啊,求救
另外如果不用那两个注释程序是对的。
...全文
116 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
1、cur_productinfo 表里面的 category字段是不是number的?把非数字放到数字类型就会报这个错。 2、cur_productinfo 表里面的 category字段长度不够。
q6413260 2014-01-06
  • 打赏
  • 举报
回复
求人帮忙啊!

17,086

社区成员

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

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