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


0