質問

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));
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top