kzen.dev
  • Preguntas
  • Etiquetas
  • Usuarios
Notificaciones
Recompensas
Registracion
Una vez que se registre, se le notificarán las respuestas y los comentarios a sus preguntas.
Entrar
Si ya tiene una cuenta, conéctese para comprobar las nuevas notificaciones.
Habrá recompensas por las preguntas, respuestas y comentarios añadidos.
Más
Fuente
Editar
 meligira
meligira
Question

ORA-06502: PL/SQL: error numérico o de valor: buffer de cadena de caracteres demasiado pequeño

He probado el siguiente código de diferentes maneras, como quitando el while o el if, pero cuando pongo los dos juntos (if y while), siempre me sale 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 := №
   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"

FIXED al cambiar cómo declaré la variable "a" a:

a varchar2(2000);

*Nota que aquí, el cambio significativo es usar VARCHAR2 en lugar de CHAR (no la mayor longitud). Según la respuesta de @user272735 'esa'es la clave.

31 2013-09-11T02:05:45+00:00 2
 rarray
rarray
Pregunta editada 25º marzo 2019 в 11:44
Programación
sql
oracle
if-statement
plsql
while-loop
Popular videos
Solución a Error encontrado ORA-12505
Solución a Error encontrado ORA-12505
hace 5 años
40. Programación en C++ || Cadenas || Introducción a las cadenas de caracteres
40. Programación en C++ || Cadenas || Introducción a las cadenas de caracteres
hace 6 años
About that error: ORA-06502: numeric or value error
About that error: ORA-06502: numeric or value error
hace 7 años
Solución error:ORA-12505 Oracle SQL Developer
Solución error:ORA-12505 Oracle SQL Developer
hace 1 año
Listener refused the  connection with the following error.ORA-12505 in oracle sql developer. FIXED!.
Listener refused the connection with the following error.ORA-12505 in oracle sql developer. FIXED!.
hace 1 año
PLSQL - ORACLE:  SUBSTR - NVL - LPAD - RPAD  - TRIM
PLSQL - ORACLE: SUBSTR - NVL - LPAD - RPAD - TRIM
hace 1 año
SQL: Error ORA-28002
SQL: Error ORA-28002
hace 7 años
Curso Oracle Sql - Video 20 - Funciones Conversion
Curso Oracle Sql - Video 20 - Funciones Conversion
hace 7 años
How to Resolve Oracle SQL Parent Key Not Found (ORA-02291)
How to Resolve Oracle SQL Parent Key Not Found (ORA-02291)
hace 4 años
Curso de Oracle PLSQL en español desde cero |  VARIABLES,  creación, configuración y uso (video 2)
Curso de Oracle PLSQL en español desde cero | VARIABLES, creación, configuración y uso (video 2)
hace 2 años
Curso de Oracle SQL en español  desde cero | FUNCIONES DATE en Oracle SQL video(22)
Curso de Oracle SQL en español desde cero | FUNCIONES DATE en Oracle SQL video(22)
hace 2 años
Curso de Oracle SQL en español desde cero | Operadores LIKE y NOT LIKE en Oracle SQL video(27)
Curso de Oracle SQL en español desde cero | Operadores LIKE y NOT LIKE en Oracle SQL video(27)
hace 2 años
Curso de Oracle SQL en español desde cero | DEFAULT, valores por defecto, video(16)
Curso de Oracle SQL en español desde cero | DEFAULT, valores por defecto, video(16)
hace 2 años
SQL ORACLE 07 variables de sustitucion y comando DEFINE
SQL ORACLE 07 variables de sustitucion y comando DEFINE
hace 8 años
Resolving ORA-00604: error occurred at recursive SQL level 1
Resolving ORA-00604: error occurred at recursive SQL level 1
hace 2 años
« Anterior
Siguiente »
L Petre
L Petre
7º octubre 2014 в 1:07
2014-10-07T13:07:55+00:00
Más
Fuente
Editar
#22185191

PL/SQL: error numérico o de valor: buffer de cadena de caracteres demasiado pequeño

se debe a que declaras una cadena con una longitud fija (digamos 20), y en algún momento de tu código le asignas un valor cuya longitud excede lo declarado.

Por ejemplo:

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

disparará un error de este tipo

40
0
 user272735
user272735
11º septiembre 2013 в 4:52
2013-09-11T04:52:23+00:00
Más
Fuente
Editar
#22185190

El CHAR es un tipo de datos de longitud fija que utiliza todo el espacio posible. Así que a:= a|'uno '; requerirá más espacio del disponible. Su problema puede reducirse 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 utilice char. Para la racionalidad comprobar la siguiente pregunta (leer también los enlaces):

  • Tipo de datos Oracle: ¿Debo usar VARCHAR2 o CHAR
 Community
Community
Respuesta editada 23º mayo 2017 в 12:18
13
0
Comunidades relacionadas 2
SQL
SQL
912 usuarios
Grupo para gente seria e interesada en el lenguaje SQL. También NoSQL. Como medida para evitar el SPAM, para unirse a este grupo es necesario rellenar un Captcha. https://telegram.me/joinchat/AGFygUDuqou03Lr4jixWbA https://telegram.me/esequele
Abrir telegram
SQL en español
SQL en español
216 usuarios
Abrir telegram
Añadir pregunta
Categorías
Todo
Tecnología
Cultura / Recreación
Vida / Artes
Ciencia
Profesional
Negocios
Usuarios
Todo
Nuevo
Popular
1
Роман Азаров
Registrado hace 2 días
2
Mansur Zakirov
Registrado hace 5 días
3
Тагир Мамедов
Registrado hace 1 semana
4
Алексей Толманов
Registrado hace 1 semana
5
Valeriu Vodnicear
Registrado hace 2 semanas
BG
DA
DE
EL
ES
FR
ID
IT
JA
NL
PT
RO
TR
ZH
© kzen.dev 2023
Fuente
stackoverflow.com
bajo licencia cc by-sa 3.0 con atribución