函数创建成功,在执行时提示数字或值错误 : 字符串缓冲区太小
时间:2011-11-23
来源:互联网
return varchar2
is
TempName varchar2(200);
ReturnName varchar2(2000);
TempID number;
begin
TempID:=0;
select name into TempName FROM ar_fault_type where id=TypeID;
SELECT ID into TempID FROM AR_FAULT_TYPE WHERE ID=TypeID;
while TempID>1 loop
begin
ReturnName:=TempName||'->'||ReturnName;
select name into TempName FROM ar_fault_type where id=TempID;
SELECT ID into TempID FROM AR_FAULT_TYPE WHERE ID=TempID;
end;
end loop;
ReturnName:= TempName||'->'||ReturnName;
return ReturnName;
end getParentTypeName;
提示出现错误在 ReturnName:=TempName||'->'||ReturnName; 这一行。
高手看看是哪里的问题呢??
作者: mjlwq 发布时间: 2011-11-23
2000长度 := 200的长度 又+ 2000的长度。
应该是超出范围了吧。
作者: yixilan 发布时间: 2011-11-23
create or replace function getParentTypeName(TypeID number)
return varchar2
is
TempName varchar2(200);
ReturnName varchar2(2000);
TempID number;
begin
TempID:=0;
select name into ……
我考虑到了这个问题,但我需要给一个varchar2的变量不断循环赋加值,请问有没有什么解决方法呢?
作者: mjlwq 发布时间: 2011-11-23
ReturnName 定义是2000长度。
2000长度 := 200的长度 又+ 2000的长度。
应该是超出范围了吧。
我考虑到了这个问题,但我需要给一个varchar2的变量不断循环赋加值,请问有没有什么解决方法呢?
作者: mjlwq 发布时间: 2011-11-23
作者: programmerxiaocai 发布时间: 2011-11-23
ReturnName varchar2(8000);
按一楼所说,即使定义8000的长度,也会出现类似的问题的。我查出的字符串大小没个都不到100。
还请大牛们指教指教啊!!!
作者: mjlwq 发布时间: 2011-11-23
引用楼主 mjlwq 的回复:
我考虑到了这个问题,但我需要给一个varchar2的变量不断循环赋加值,请问有没有什么解决方法呢?
你在每次赋完值之后,都输出一下,看看最后退出前的ReturnName,累加完到底是多少。
while TempID>1 loop
begin
ReturnName:=TempName||'->'||ReturnName;
dbms_output.put_line(ReturnName);
...
end loop
另外想问一下,你这个LOOP能循环多少次?
作者: yixilan 发布时间: 2011-11-23
作者: programmerxiaocai 发布时间: 2011-11-23
如果你输入的值查找出来的TempID>1, 就是一个死循环,再长也不行。
哈哈,的确是个死循环,都没有退出的地方^_^
作者: yixilan 发布时间: 2011-11-23
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28