valor too tipo tamaño small resultado que pequeño peque ora numérico maximo largo error demasiado dato concatenación caracteres cadenas cadena sql oracle if-statement plsql while-loop

sql - too - tipo de dato clob oracle



ORA-06502: PL/SQL: error numérico o de valor: búfer de cadena de caracteres demasiado pequeño (2)

PL / SQL: error numérico o de valor: el búfer de cadena de caracteres es demasiado pequeño

se debe al hecho de que declaras que una cadena tiene una longitud fija (digamos 20), y en algún punto de tu código le asignas un valor cuya longitud excede la que declaraste.

por ejemplo:

myString VARCHAR2(20); myString :=''abcdefghijklmnopqrstuvwxyz''; --length 26

disparará tal error

Probé el siguiente código de diferentes maneras, como sacar el tiempo o el si, pero cuando puse ambos juntos (si y mientras), siempre obtengo el error al final ...

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 := &numero; 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; /

ERROR:

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"

ARREGLADO cambiando la forma en que declare la variable "a" a:

a varchar2(2000);


CHAR es un tipo de datos de longitud fija que utiliza tanto espacio como sea posible. Entonces a:= a||''one ''; requerirá más espacio de lo que está disponible. Su problema se puede reducir al siguiente ejemplo:

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; /

Nunca use char . Para el análisis razonado, verifique la siguiente pregunta (lea también los enlaces):

  • Tipo de datos Oracle: ¿Debo usar VARCHAR2 o CHAR?