PL/SQL: 数字或值错误 - ORA-06502

Posted

技术标签:

【中文标题】PL/SQL: 数字或值错误 - ORA-06502【英文标题】:PL/SQL: numeric or value error - ORA-06502 【发布时间】:2020-10-30 05:24:41 【问题描述】:

我不断收到 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 一样的错误

【问题讨论】:

【参考方案1】:

您尝试为 varchar 变量赋值,但该值大于该变量的处理能力。

你要选择

TO_CHAR(t_old.var_v_2) AS two - number(8)

进入

var_v_2 - varchar2(4 char), 

您不能将8 字符选择到变量中,大小为4 字符。

【讨论】:

以上是关于PL/SQL: 数字或值错误 - ORA-06502的主要内容,如果未能解决你的问题,请参考以下文章

执行立即错误:PL/SQL:数字或值错误:字符到数字转换错误

PL/SQL: 数字或值错误 - ORA-06502

获取 ORA-06502:PL/SQL:数字或值错误:SQL 触发器中的字符到数字转换错误

ORA-06502: PL/SQL: 数字或值错误: 字符到数字的转换错误

ORA-06502 PL/SQL:数字或值错误:字符到数字的转换错误;

ORA-06502: PL/SQL: 数字或值错误: 数字精度太大