Problemi con l'esecuzione di query di inserimento con variabili varray
Domanda
Sto usando SQL * Plus 9.2 su Oracle 10g enterprise. Ho creato alcuni script che eseguono inserimenti di base utilizzando i parametri che passo attraverso il prompt dei comandi. Sembrava logico che avrei potuto eseguire un gruppo di inserti in un ciclo. Quindi ho provato quanto segue:
--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
Quando eseguo lo script, ricevo un messaggio che il PL / SQL è stato completato correttamente. Ho provato a eseguire il debug e utilizzare dbms_output
per visualizzare i valori di org (i)
. Sembra tutto a posto. Ma le righe non vengono mai inserite nel database. Non appena eseguo una selezione, le nuove righe non sono presenti. C'è qualche trucco sul looping e sull'inserimento?
(Ho anche provato IS VARRAY (6) OF
al posto di IS TABLE OF
. Stesso non risultato)
Soluzione
Nell'istruzione insert hai org (i) tra virgolette singole. Non dovresti averlo, probabilmente stai inserendo le parole org (i) come valori nella tabella. Quindi la tua dichiarazione di inserimento dovrebbe essere
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));