【发布时间】:2012-06-29 19:45:01
【问题描述】:
我有一个 select 语句,需要在我的 pl/sql 中选择几十列到自定义变量中。如下:
select col1,
col2,
....
col30
into var1,
...
var30
from table
where ....
在执行 SP 时遇到错误:
ORA-06502:PL/SQL:数字或值错误:字符串缓冲区太 小
错误信息只指出了select语句的第一行。即使我能弄清楚我定义的变量太小而无法容纳列,它仍然让我很难精确定位错误定义的变量。这对我来说不是调试这个 sp 的有效方法。
有没有更好的办法,请指教。
【问题讨论】:
-
为了调试把它分成更小的组怎么样?一旦你发现问题出在哪里,你就可以在一个语句中再次找出它们。
-
如果您选择简单的列,将变量定义为
var1 table.col1%TYPE等会很有帮助,而不是指定可能会出错的varchar2长度。 (如果表定义发生变化,这也避免了修改代码)。您可能仍需要为某些列手动定义变量,例如如果您有函数调用或串联,但如果您看到此错误,则检查的次数会更少。还要仔细检查select和into中的列是否具有相同的顺序,这对于很多列有时并不明显。