質問
Oracle 10g Enterprise で SQL*Plus 9.2 を使用しています。コマンド プロンプトを介して渡すパラメーターを使用して基本的な挿入を行うスクリプトをいくつか作成しました。ループ内で大量の挿入を実行できるはずだと論理的に思えました。そこで私は次のことを試しました:
--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
スクリプトを実行すると、PL/SQL が正常に完了したというメッセージが表示されます。デバッグして使ってみた dbms_output
の値を表示するには org(i)
. 。すべてがうまく見えます。ただし、行がデータベースに入力されることはありません。選択を行うとすぐに、新しい行は存在しません。ループと挿入について何かコツはありますか?
(私も試してみました IS VARRAY(6) OF
代わりに IS TABLE OF
. 。同じ結果ではありませんでした)
解決
insert ステートメントでは、org(i) を一重引用符で囲んでいます。おそらく org(i) という単語を値としてテーブルに挿入しているはずです。したがって、挿入ステートメントは次のようにする必要があります
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));
所属していません StackOverflow