收到错误“ORA-06502:PL/SQL:数字或值错误:字符串缓冲区太小”

Posted

技术标签:

【中文标题】收到错误“ORA-06502:PL/SQL:数字或值错误:字符串缓冲区太小”【英文标题】:Getting an Error “ORA-06502: PL/SQL: numeric or value error: character string buffer too small” 【发布时间】:2012-07-26 15:09:13 【问题描述】:

这是我的查询

  begin
              select ceq_specimens.numero as NUMERO,
                       analyseEffectuee.DESCRIPTION as analyseEffectuee
              into out_rec.NUMERO_SPECIMEN3, out_rec.SPEC3_ANALYSE_EFFECTUE          
              from CEQ_FORMULAIRES_ANALYSES
              inner join ceq_liste_choix analyseEffectuee on analyseEffectuee.ID_LISTE_CHOIX=CEQ_FORMULAIRES_ANALYSES.ID_ANALYSE_EFFECTUE  
              inner join ceq_specimens on ceq_specimens.ID_SPECIMEN=CEQ_FORMULAIRES_ANALYSES.ID_SPECIMEN and ceq_specimens.ID_SPECIMEN=vintIdSpecimen3
              where CEQ_FORMULAIRES_ANALYSES.ID_FORMULAIRE=out_rec.ID_FORMULAIRE;
          EXCEPTION
            WHEN NO_DATA_FOUND THEN
            out_rec.NUMERO_SPECIMEN3 := ' ';
            out_rec.SPEC3_ANALYSE_EFFECTUE := ' ';  
          END;              

...

IF analyseEffectuee.DESCRIPTION as analyseEffectuee = 无法分析的样本:Préciser en commentaire(s)

我收到错误“字符串缓冲区太小”

IF analyseEffectuee.DESCRIPTION as analyseEffectuee= Non

在这种情况下没有问题

谢谢你帮助我!

【问题讨论】:

analyseEffectuee.DESCRIPTIONout_rec.SPEC3_ANALYSE_EFFECTUE 的类型和大小是什么?如果我不得不猜测,我会说您的尺寸不匹配:收件人小于内容。 【参考方案1】:

我得到错误“字符串缓冲区太小”“

这意味着您的变量 out_rec.SPEC3_ANALYSE_EFFECTUE 不足以容纳 Spécimen impossible à analyser: Préciser en commentaire(s) 的值。

定义 PL/SQL 变量的最佳方式是使用 %TYPE 关键字。这将创建一个与列定义匹配的变量。

您的代码使用了一种叫做 OUTREC 的东西。你没有给我们这个的定义,这使得纠正你的具体问题变得更加困难,但也许你应该做这样的事情。声明一个匹配你想要的输出的 PL/SQL 记录类型,然后声明一个该类型的变量:

type my_rec_t is record (
    NUMERO_SPECIMEN1 ceq_specimens.numer%type,
   SPEC1_ANALYSE_EFFECTUE    analyseEffectuee.DESCRIPTION%type,        
    NUMERO_SPECIMEN2 ceq_specimens.numer%type,
   SPEC2_ANALYSE_EFFECTUE    analyseEffectuee.DESCRIPTION%type,        
    NUMERO_SPECIMEN3 ceq_specimens.numer%type,
   SPEC3_ANALYSE_EFFECTUE    analyseEffectuee.DESCRIPTION%type        
); 
out_rec my_rec_t;

ORA-02303: 不能用类型或表依赖项删除或替换类型

所以这意味着您正在使用带有继承的 SQL 类型。解决这个问题有点问题。有一些语法可以与 ALTER TYPE 命令一起使用,它允许我们处理依赖类型。 Find out more.

【讨论】:

NUMERO_SPECIMEN3 它是一个 varchar(50) 但 [错误] 编译 (1: 1): ORA-02303: 无法删除或替换类型或依赖表的类型 我尝试将其更改为 varchar250 我得到 [Error] Compilation (1: 1): ORA-02303: cannot drop or replace a type with type or tabledependent

以上是关于收到错误“ORA-06502:PL/SQL:数字或值错误:字符串缓冲区太小”的主要内容,如果未能解决你的问题,请参考以下文章

oracle ORA-06502:PL/SQL:数字或值错误:批量绑定:截断绑定

PL/SQL - 防止 ORA-06502

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

ORA-06502:PL/SQL:数字或值错误:NULL 索引表键值 ORA-06512:在“OJC.JC_MASTER”,第 129 行

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

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