FOR this_loop
IN (SELECT field_A, field_B
FROM TABLE_NAME
WHERE num = i_num)
LOOP
IF this_loop.field_B BETWEEN 1 AND 3
THEN
v_A := v_A || ' ' || this_loop.field_A;
ELSIF this_loop.field_B BETWEEN 4 AND 8
THEN
v_field_A := v_field_A || ' ' || this_loop.field_A; -- Error is at this line
ELSIF this_loop.field_B BETWEEN 9 AND 15
THEN
v_B := v_B || ' ' || this_loop.field_A;
END IF;
END LOOP;
变量标为
v_field_A VARCHAR2 (100);
我知道的 -
- 变量 v_field_A 不能保存超过 100 个字符的值
- 我从
SELECT
查询得到的输出不超过 10 个字符。
我的问题 - 当字符在 varchar2 的限制范围内时,怎么可能面对这个空间缓冲区问题?几年前我遇到过这个问题,但上次原因是 select
查询的输出。它有超过 100 个字符,因此存在大小问题,但这次不超过 10 个字符。我很困惑。任何帮助表示赞赏
原文由 Pirate X 发布,翻译遵循 CC BY-SA 4.0 许可协议
为什么不?这是很有可能的,因为您要 连接 CURSOR FOR LOOP 中每一行的变量。
例如,
使用 DBMS_OUTPUT 查看变量的当前大小和附加的新值。
让我们调试
错误
很明显,我们想将长度为
5
的字符串连接到声明为最大大小的变量50
,当前的大小为50
。因此,它会抛出错误ORA-06502: PL/SQL: numeric or value error: character string buffer too small
。