【发布时间】:2016-01-11 11:22:05
【问题描述】:
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 个字符。我很困惑。任何帮助表示赞赏
【问题讨论】:
-
你的表有多少行?
-
有超过一百万行,但这只发生在少数行中。
-
更具体地说,循环获取多少行? 10 char * 11 循环迭代 == 你会遇到错误,因为你在每次迭代时都将值连接到变量
-
为什么不能增加 v_field_A 的大小?这将解决问题
-
@Sathya 这取决于。通常不超过 3-4 行。
标签: sql oracle plsql oracle11g