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)

È stato utile?

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));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top