無名ブロック内でのDDL実行について
環境は
Linux + oracle 10g R2です。
簡単な無名プロシージャを書いていてはまって
しまいました。
分かる方でしたら、あっというまに指摘していただけそうなので
こちらに質問しました。
無名ブロック内で以下の事を行いたいのですが、うまく動作を確認できません。
※以下は意味の無い処理となっていますが、今回説明用に短くしてみました。
◇実現したい事
1.CREATE TABLE文の実行 (ここではEX01テーブルを作成します)
2.CREATE したテーブルにたいしてINSERT
3.CREATE したテーブルのDROP
◇私の実行結果
$ sqlplus scott/tiger@orcl
SQL> SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME ='EX01';
レコードが選択されませんでした。
-- 私の思いでは以下のプロシージャは正常に動作するのでは?
-- と思うのですが、以下の通りエラーとなってしまいます。
--
SQL> BEGIN
2 DBMS_UTILITY.EXEC_DDL_STATEMENT('CREATE TABLE EX01 ( C1 NUMBER,C2 VARCHAR2(10))');
3 INSERT INTO EX01(C1,C2) VALUES(1,'AAA');
4 DBMS_UTILITY.EXEC_DDL_STATEMENT('DROP TABLE EX01');
5 END;
6 /
INSERT INTO EX01(C1,C2) VALUES(1,'AAA');
*
行3でエラーが発生しました。:
ORA-06550: 行3、列13:
PL/SQL: ORA-00942: 表またはビューが存在しません。
ORA-06550: 行3、列1:
PL/SQL: SQL Statement ignored
--
-- なので、処理を分割して行ってみました。
-- まずはCREATE TABLEのみ
--
SQL> BEGIN
2 DBMS_UTILITY.EXEC_DDL_STATEMENT('CREATE TABLE EX01 ( C1 NUMBER,C2 VARCHAR2(10))');
3 END;
4 /
PL/SQLプロシージャが正常に完了しました。
--
-- CREATE TABLEは正常に動作したようです。
--
SQL> INSERT INTO EX01(C1,C2) VALUES(1,'AAA');
1行が作成されました。
--
-- INSERT文も正常に動作したようです。
--
SQL> BEGIN
2 DBMS_UTILITY.EXEC_DDL_STATEMENT('DROP TABLE EX01');
3 END;
4 /
PL/SQLプロシージャが正常に完了しました。
--
-- なんとDROP TABLEも正常に動作したようです。
--
SQL> SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME ='EX01';
レコードが選択されませんでした。
SQL>
そうなんです。3行まとめて記載するとエラーとなるのですが、
上記の通りそれぞれ分けて実行すると正常に動作するのです。
これはどこが悪いのでしょうか?
情けない事に、今日の午後はこれでほとんどつぶれてしまいました。
どなたか助けてください。
以上よろしくお願いします。
お礼
ご回答ありがとうございます! 私の探していた内容だと思います。 メーカー独自の言い方ですかー。。。 勉強になりました!ありがとうございました。