sábado, 21 de julio de 2012

ORA-06502: PL/SQL: numeric or value error: character string buffer too small



Estoy trabajando con SQL*PLUS. Y lo que hago básicamente son unos Scripts que  dejo como archivos .sql y luego los ejecuto desde una Shell. Al momento de ejecutar uno de estos procesos, me apareció el siguiente error:

BEGIN :MES_3030_DESDE := TRUNC(ADD_MONTHS(SYSDATE,-4),'MM'); END;
*
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at line 1


Mi código consiste en la declaración de la variable:
VARIABLE  MES_DESDE VARCHAR2(7);

Asignación de un valor a esa variable, que es el punto donde estaba fallando
exec :MES_DESDE := TRUNC(ADD_MONTHS(SYSDATE,-4),'MM');

Si veo que retorna lo que estoy asignando encuentro cual es el motivo
SELECT TRUNC(ADD_MONTHS(SYSDATE,-4),'MM') FROM dual;


El resultado de la consulta es:
01/03/12
Ocho caracteres, los cuales estoy tratando de poner en un espacio para siete.

Entonces este error ocurre porque estoy tratando de poner mas caracteres en una variable donde no caben. Osea , lo correcto es que la definición sea:
VARIABLE  MES_DESDE VARCHAR2(8);



No hay comentarios: