Problème d'exécution des requêtes d'insertion avec des variables varray
Question
J'utilise SQL * Plus 9.2 sur Oracle 10g Enterprise. J'ai créé des scripts qui font des insertions de base à l'aide de paramètres que je transmets via l'invite de commande. Il semblait logique que je sois capable de faire tourner un tas d'inserts en boucle. J'ai donc essayé ce qui suit:
--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
Lorsque j'exécute le script, je reçois un message indiquant que l'opération PL / SQL a abouti. J'ai essayé de déboguer et d'utiliser dbms_output
pour afficher les valeurs de org (i)
. Tout va bien. Mais les lignes ne sont jamais entrées dans la base de données. Dès que je fais une sélection, les nouvelles lignes ne sont pas là. Existe-t-il une astuce pour boucler et insérer des inserts?
(J'ai aussi essayé IS VARRAY (6) OF
à la place de IS TABLE OF
. Même résultat non résultat)
La solution
Dans votre déclaration d’insertion, vous avez org (i) entre guillemets simples. Vous ne devriez pas avoir cela, vous insérez probablement les mots org (i) en tant que valeurs dans la table. Donc, votre déclaration d'insertion devrait être
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));