• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:無名ブロック内でのDDL実行について)

無名ブロック内でのDDL実行について

このQ&Aのポイント
  • 無名ブロック内でCREATE TABLE文を実行し、EX01テーブルを作成します。その後、INSERT文でデータを挿入し、最後にDROP TABLE文でテーブルを削除します。
  • 無名ブロック内で3つの処理を行いたい場合、それぞれの処理を分けて実行する必要があります。まずはCREATE TABLE文のみを実行してテーブルを作成し、次にINSERT文でデータを挿入し、最後にDROP TABLE文でテーブルを削除します。
  • 無名ブロック内でCREATE TABLE文の実行後にINSERT文を実行するとエラーが発生し、テーブルが存在しないというエラーメッセージが表示されます。そのため、CREATE TABLE文とINSERT文を分けて実行する必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • dda167
  • ベストアンサー率76% (55/72)
回答No.1

PL/SQLプログラムを解析する時点で テーブルが存在しないからエラーになります。 (エラーメッセージのとおりです) INSERT文も動的SQLにしてください。

baunce
質問者

お礼

なるほど。 おっしゃる通りですね。 ご指摘を受けて気づきました。 本当にありがとうございました。 念のために以下検証しました。 当然うまくいくこと確認できました。 SQL> BEGIN 2 DBMS_UTILITY.EXEC_DDL_STATEMENT('CREATE TABLE EX01 ( C1 NUMBER,C2 VARCHAR2(10))'); 3 EXECUTE IMMEDIATE 'INSERT INTO EX01(C1,C2) VALUES(1,''AAA'')'; 4 DBMS_UTILITY.EXEC_DDL_STATEMENT('DROP TABLE EX01'); 5 END; 6 / PL/SQLプロシージャが正常に完了しました。 SQL> これで今夜はすっきり眠れます。

その他の回答 (1)

  • noyuo
  • ベストアンサー率39% (33/84)
回答No.2

INSTERT の前に COMMIT文があると、 結果がちがうのかなぁ?

baunce
質問者

お礼

コメントありがとうございます。 dda167さんのご指摘の通りでした。