
環境は
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行まとめて記載するとエラーとなるのですが、
上記の通りそれぞれ分けて実行すると正常に動作するのです。
これはどこが悪いのでしょうか?
情けない事に、今日の午後はこれでほとんどつぶれてしまいました。
どなたか助けてください。
以上よろしくお願いします。
No.1ベストアンサー
- 回答日時:
PL/SQLプログラムを解析する時点で
テーブルが存在しないからエラーになります。
(エラーメッセージのとおりです)
INSERT文も動的SQLにしてください。
なるほど。
おっしゃる通りですね。
ご指摘を受けて気づきました。
本当にありがとうございました。
念のために以下検証しました。
当然うまくいくこと確認できました。
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>
これで今夜はすっきり眠れます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- MySQL 何にかが違うから エラーなんでしょうね! 2 2022/09/18 05:28
- MySQL MySQLのテーブル作成でハイフン - は使用できないのでしょうか? 2 2022/10/21 16:50
- MySQL テーブル作成です。どこかのスペルが間違っているか記号など スペースかな? 1 2022/10/01 05:08
- PHP php エラー 2 2022/10/23 16:43
- PHP プログラムコードを入力する場合改行してもいいですか? 2 2022/10/02 16:05
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
OracleとADO
-
ORA-01013のエラーについて経験...
-
iTuneでCDを作成したいのですが
-
Dynabook T351/46CW のエラーコ...
-
SQLのSP2-エラーについて
-
フラグメンテーションの解消
-
オラクルエラーの早見表
-
AIX機へのOracleインストール中...
-
メモリ不足について
-
ストアド実行でORA-4030エラー ...
-
DATABSE LINKについて
-
CASE文のエラーについて
-
PL/SQLについての質問です。
-
MySQL ログについて(有効にす...
-
xy平面上の点P(x,y)に対し,点Q(...
-
HD 上の「移動できないファイル...
-
iTunesで曲のバックアップ???
-
オラクル9iのリストア
-
クローンソフトで、Acronis Tru...
-
リカバリ時のデータバックアッ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ORA-01013のエラーについて経験...
-
PL/SQL PLS-00103エラーについて
-
CASE文のエラーについて
-
ORA-01843: 指定した月が無効で...
-
はじめまして!
-
PCC-S-02201エラーの対処を教え...
-
「ORA-00907: 右カッコがありま...
-
ORA-06502のエラー
-
シェルスクリプトでオラクルの...
-
PL/SQLによるCREATE TABLE後のI...
-
PL/SQLのコンパイルエラーにつ...
-
ACCESSでパススルークエリにパ...
-
データベースのカラムの型がCHA...
-
ビューが作成できない
-
HAVING句でのBETWEEN演算子
-
ORA-12571パケット書き込みエラ...
-
無効なSQL文の具体例を教えてく...
-
pro*c で pl/sql に変数を渡す...
-
PL/SQLでPLS-00201のエラー
-
エラーコードについて
おすすめ情報