Oracle - Insert dinamico pl/sql

 
Vista:

Insert dinamico pl/sql

Publicado por julia (1 intervención) el 04/07/2011 17:13:15
Estoy empezando con pl/sql, y tengo dudas sobre esto que hice:
me tirar error ORA-01401: inser value too large for column, que seguramente debe ser que el string que se va armando en la variable VALORES debe ser un desastre!
tmb tengo dudas sobre si esta bien
"select UNACOL into UNVALOR from PTA_TARIGEN_SMS where rownum <2; "

Agradeceria que me ayudaran!

DECLARE
str_sql VARCHAR2(5000);
i NUMBER(2) := 1;
CURSOR columna IS select COLUMN_NAME from USER_TAB_COLUMNS WHERE TABLE_NAME='PTA_TARIGEN_SMS';
COLUMNAS VARCHAR2(5000);
UNACOL VARCHAR2(20);
VALORES VARCHAR2(5000);
UNVALOR VARCHAR2(20);

BEGIN

OPEN columna;

LOOP
FETCH columna INTO UNACOL;
EXIT WHEN columna%NOTFOUND;

select UNACOL into UNVALOR from PTA_TARIGEN_SMS where rownum <2;

IF COLUMNAS IS NULL THEN
COLUMNAS := UNACOL;
VALORES := '''' || UNVALOR || '''';
ELSE
COLUMNAS := COLUMNAS || ','|| UNACOL ;
VALORES := VALORES ||', ''' || UNVALOR ||'''' ;
END IF;
END LOOP;

FOR i IN 1..1 LOOP
str_sql := 'INSERT INTO PTA_TARIGEN_SMS (' || COLUMNAS || ' )
VALUES ( ' || VALORES || ' )';
EXECUTE IMMEDIATE str_sql;
END LOOP;
CLOSE columna;
COMMIT;
END;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Insert dinamico pl/sql

Publicado por Luis (51 intervenciones) el 27/07/2011 02:40:23
Hola Julia, este error indica que la longitud del valor que quieres insertar en una columna es mas grande que la longitud de la columna. Verifica la longitud de los datos con los que trabajas y a donde los asignas.

Una recomendacion, puedes obtener la longitud con la funcion length( ) e imprimir la longitud de los valores con dbms_output.put_line( ) .

Tambien te recomiendo que las variables las especifiques asi :
UNVALOR PTA_TARIGEN_SMS.UNACOL%type;

asi tomará el tipo de dato de la columna.

Me comentas como te va o me escribes a mi correo referenciando tu consulta.

Saludos

Luis.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar