Problemas al ejecutar consultas de inserción con variables varray
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)
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));