【问题标题】:PL/SQL: numeric or value error - ORA-06502PL/SQL: 数字或值错误 - 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 一样的错误

【问题讨论】:

    标签: oracle plsql


    【解决方案1】:

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

    你要选择

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

    进入

    var_v_2 - varchar2(4 char), 
    

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

    【讨论】:

      猜你喜欢
      • 2014-04-25
      • 1970-01-01
      • 1970-01-01
      • 2016-12-18
      • 2021-12-26
      • 2014-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多