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)

Était-ce utile?

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));
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top