Probleme beim Ausführen Einsatz Abfragen mit VARRAY Variablen
Frage
Ich bin mit SQL * Plus 9.2 auf Oracle 10g Enterprise. Ich habe einige Skripte erstellt, die grundlegenden Einsätze mit Hilfe von Parametern zu tun, die ich über die Eingabeaufforderung übergeben. Es schien logisch, dass ich in der Lage sollte eine Reihe von Einsätzen in einer Schleife zu laufen. Also habe ich versucht die folgenden:
--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
Als ich das Skript ausführen, erhalte ich eine Meldung, dass die PL / SQL erfolgreich abgeschlossen. Ich habe versucht, das Debuggen und mit dbms_output
die Werte von org(i)
Diplay. Alles sieht gut aus. Aber die Zeilen nie in die Datenbank eingetragen bekommen. Sobald ich eine Auswahl tun, sind die neuen Zeilen nicht da. Gibt es einen Trick, um Looping und tun Einsätze?
(Ich habe auch versucht IS VARRAY(6) OF
anstelle von IS TABLE OF
. Gleiche Nicht-Ergebnis)
Lösung
In Ihrer Insert-Anweisung Sie haben org (i) in einfachen Anführungszeichen. Sie sollten das nicht, Sie einfügen wahrscheinlich die Worte org (i) als Werte in die Tabelle. So sollte Ihre Insert-Anweisung sein
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));