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

时间:2012-07-26 15:09:14

标签: oracle plsql

这是我的查询

  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;              

...

如果analyseEffectuee.DESCRIPTION as analyseEffectuee =Spécimenuntergàisalyse:Préciserencommentaire(s)

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

IF analyseEffectuee.DESCRIPTION as analyseEffectuee = Non

在这种情况下没问题

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

  

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

这意味着您的变量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.