Pir*_*e X 4 sql oracle plsql oracle11g
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;
Run Code Online (Sandbox Code Playgroud)
变量声明为
v_field_A VARCHAR2 (100);
Run Code Online (Sandbox Code Playgroud)
我知道的 -
SELECT查询中获得的输出没有超过10个字符。我的问题-当字符受到varchar2的限制时,如何甚至可能面对这个空间缓冲区问题?我几年前就遇到过这个问题,但是上一次原因是select查询的输出。它有超过100个字符,因此出现了大小问题,但是这次不超过10个字符。我糊涂了。任何帮助表示赞赏
变量v_field_A的值不能超过100个字符
为什么不?因为您要在CURSOR FOR LOOP中为每一行串联变量,所以这很有可能。
例如,
SQL> DECLARE
2 v_name VARCHAR2(50);
3 BEGIN
4 FOR i IN
5 (SELECT ename FROM emp
6 )
7 LOOP
8 v_name := v_name || i.ename;
9 END LOOP;
10 END;
11 /
DECLARE
*
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at line 8
Run Code Online (Sandbox Code Playgroud)
使用DBMS_OUTPUT可以查看变量的当前大小以及附加的新值。
让我们调试
SQL> DECLARE
2 v_name VARCHAR2(50);
3 BEGIN
4 FOR i IN
5 (SELECT ename FROM emp
6 )
7 LOOP
8 dbms_output.put_line('Length of new value = '||LENGTH(i.ename));
9 v_name := v_name || i.ename;
10 dbms_output.put_line('Length of variable = '||LENGTH(v_name));
11 END LOOP;
12 END;
13 /
Length of new value = 5
Length of variable = 5
Length of new value = 5
Length of variable = 10
Length of new value = 4
Length of variable = 14
Length of new value = 5
Length of variable = 19
Length of new value = 6
Length of variable = 25
Length of new value = 5
Length of variable = 30
Length of new value = 5
Length of variable = 35
Length of new value = 5
Length of variable = 40
Length of new value = 4
Length of variable = 44
Length of new value = 6
Length of variable = 50
Length of new value = 5
Run Code Online (Sandbox Code Playgroud)
错误
DECLARE
*
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at line 9
Run Code Online (Sandbox Code Playgroud)
很明显,我们想将一个长度5为字符串的字符串连接到声明为max size的变量上,该变量50当前具有size的值50。因此,它将引发错误ORA-06502: PL/SQL: numeric or value error: character string buffer too small。
| 归档时间: |
|
| 查看次数: |
56684 次 |
| 最近记录: |