Pregunta

Estoy usando SQL*Plus 9.2 en Oracle 10g Enterprise.He creado algunos scripts que realizan inserciones básicas utilizando parámetros que paso a través del símbolo del sistema.Parecía lógico que pudiera ejecutar un montón de inserciones en un bucle.Entonces probé lo siguiente:

--begin

DECLARE

TYPE va_orgs IS TABLE OF nbr.lien_item.lien_item_name%type;

org va_orgs :=  va_orgs('RTA','RTB','RTE','RTI','RTM','RTT');

BEGIN

FOR i in org.FIRST .. org.LAST

LOOP

INSERT INTO nbr.lien_item (lien_item_sid, excel_row, include_in_calcs, indent, header_level, sort_order, unit, lien_item_status, lien_item_name) VALUES (nbr.lien_item_seq.nextval, 0, 'Y', 1, 0, 1, 'FTE', 'A', 'org(i)');

COMMIT;

END LOOP;

END;

/

--end

Cuando ejecuto el script, aparece un mensaje que indica que PL/SQL se completó correctamente.Intenté depurar y usar dbms_output para mostrar los valores de org(i).Todo parece estar bien.Pero las filas nunca se ingresan en la base de datos.Tan pronto como hago una selección, las nuevas filas no aparecen.¿Hay algún truco para hacer bucles y hacer inserciones?

(También lo intenté IS VARRAY(6) OF en lugar de IS TABLE OF.Mismo no resultado)

¿Fue útil?

Solución

En su declaración de inserción tiene org(i) entre comillas simples.No deberías tener eso, probablemente estés insertando las palabras org(i) como valores en la tabla.Entonces su declaración de inserción debería ser

INSERT INTO nbr.lien_item (lien_item_sid, excel_row, include_in_calcs, indent, header_level, sort_order, unit, lien_item_status, lien_item_name) VALUES (nbr.lien_item_seq.nextval, 0, 'Y', 1, 0, 1, 'FTE', 'A', org(i));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top