我一直在收到ORA-06502:PL / SQL:数字或值错误:字符串缓冲区太小。这是我的工作。
CREATE OR REPLACE TYPE t_new_var AS OBJECT (
var_v_1 varchar2(6 char),
var_v_2 varchar2(4 char),
var_v_3 varchar2(4 char),
CONSTRUCTOR FUNCTION t_new_var(SELF IN OUT NOCOPY t_new_var) RETURN SELF AS RESULT
);
CREATE OR REPLACE TYPE t_old AS OBJECT (
var_v_1 number(3), -- nullable
var_v_2 number(8), -- nullable
var_v_3 number(2), -- nullable
CONSTRUCTOR FUNCTION t_old(SELF IN OUT NOCOPY t_old) RETURN SELF AS RESULT
);
在过程中:
SELECT
TO_CHAR(t_old.var_v_1) AS one,
TO_CHAR(t_old.var_v_2) AS two,
TO_CHAR(t_old.var_v_3) AS three
INTO
t_new_v.var_v_1,
t_new_v.var_v_2,
t_new_v.var_v_3
FROM DUAL;
这是什么问题?我尝试过,CAST DECODE以及NVL同样的错误
答案 0 :(得分:1)
您尝试为varchar变量分配一个值,但该值大于该变量可以处理的值。
您要选择
TO_CHAR(t_old.var_v_2) AS two - number(8)
进入
var_v_2 - varchar2(4 char),
您不能在变量8
个字符的大小中选择4
个字符。