收到错误“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.DESCRIPTION
和 out_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:数字或值错误:批量绑定:截断绑定
ORA-06502 PL/SQL:数字或值错误:字符到数字的转换错误;
ORA-06502:PL/SQL:数字或值错误:NULL 索引表键值 ORA-06512:在“OJC.JC_MASTER”,第 129 行