consultas de inserção running problemas com variáveis ??VARRAY
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)
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));