ORA-06502: PL/ SQL: Erreur numérique ou de valeur: tampon de chaîne de caractères trop petit
j'ai essayé le code suivant de différentes façons, comme en prenant le temps ou le SI, mais quand je mets les deux ensemble (si et si), j'obtiens toujours l'erreur à la fin...
undefine numero
set serveroutput on
accept numero prompt 'Type # between 100 and 999: '
declare
i number:=1;
a char(25);
b char(1);
c varchar2(10);
d number;
begin
c := №
d := length(c);
b := substr(c, i, 1);
while i <= d loop
if b = '1' then
a:= a||'one ';
end if;
i := i+1;
end loop;
dbms_output.put_line('The number is '||a);
end;
/
erreur:
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at line 13
06502. 00000 - "PL/SQL: numeric or value error%s"
fixe en changeant la façon dont j'ai déclaré la variable" a "à:
a varchar2(2000);
2 réponses
PL/SQL: Erreur numérique ou valeur: tampon de chaîne de caractères trop petit
est dû au fait que vous déclarez une chaîne de caractères d'une longueur fixe (disons 20), et à un moment donné dans votre code vous lui Assignez une valeur dont la longueur dépasse ce que vous avez déclaré.
par exemple:
myString VARCHAR2(20);
myString :='abcdefghijklmnopqrstuvwxyz'; --length 26
va déclencher une telle erreur
CHAR
est un type de données de longueur fixe qui utilise autant d'espace que possible. Donc a:= a||'one ';
aura besoin de plus d'espace que disponible. Votre problème peut être réduit à l'exemple suivant:
declare
v_foo char(50);
begin
v_foo := 'A';
dbms_output.put_line('length of v_foo(A) = ' || length(v_foo));
-- next line will raise:
-- ORA-06502: PL/SQL: numeric or value error: character string buffer too small
v_foo := v_foo || 'B';
dbms_output.put_line('length of v_foo(AB) = ' || length(v_foo));
end;
/
N'utilisez jamais char
. Pour la justification, vérifier la question suivante (lire aussi les liens):