Pergunta

Estou usando o SQL * Plus 9.2 no Oracle 10g Enterprise. Eu criei alguns scripts que fazem inserções básicos utilizando parâmetros que eu passar pelo prompt de comando. Parecia lógico que eu deveria ser capaz de executar um monte de inserções em um loop. Então, eu tentei o seguinte:

--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 eu executar o script, recebo uma mensagem de que o PL / SQL concluído com êxito. Tentei depuração e usando dbms_output para diplay os valores de org(i). Tudo parece bem. Mas as linhas nunca são inseridos no banco de dados. Assim que eu a escolha, as novas linhas não estão lá. Existe algum truque sobre looping e fazendo inserções?

(Eu também tentei IS VARRAY(6) OF no lugar de IS TABLE OF. Mesmo não-resultado)

Foi útil?

Solução

Na sua declaração de inserção você tem org (i) entre aspas simples. Você não deveria ter que, provavelmente você está inserindo as palavras org (i) como valores na tabela. Portanto, sua instrução de inserção deve ser

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));
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top