• ベストアンサー

表名を動的SQLで

表名にYYMMなどがついているケースで、 動的に表名を使用したいのですが、 INSERTやUPDATE文で動的に表名を 使用する方法をご教授願えませんか? 環境はOracle9iのpl/sqlです。 宜しく御願い致します。

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

  • ベストアンサー
回答No.1

こんにちは。 DBMS_SQLパッケージか、IMMEDIATEを使います。 IMMEDIATEはDBMS_SQLに比べて、オーバーヘッドが多いようです・・・。 (^^ゞ

ike_aqc
質問者

お礼

さっそくの回答、ありがとうございます。 列の値などは、DBMS_SQLパッケージでできたのですが、 表名の場合、ORA-0903のエラーが出ました。 表名の場合のやり方は特別なのでしょうか? もしよろしければ、引き続き御教授下さい。

その他の回答 (2)

回答No.3

こんにちは。 >>表名の場合のやり方は特別なのでしょうか? いいえ、一緒ですよ。 変数でも何でもいいです(実行時に解析するので、コンパイルではエラーになりません)。 >>表名の場合、ORA-0903のエラーが出ました。 うーん、Oracleのエラーは5桁なんですが・・・。 何のエラーなんでしょう? (^^ゞ

ike_aqc
質問者

お礼

とりあえずIMMEDIATEの方でやってみます。 ありがとうございました。

  • GoF
  • ベストアンサー率37% (34/91)
回答No.2

「単発」の動的SQLであれば EXECUTE IMMEDIATE 'SQL文' または 変数 の方がDBMS_SQLパッケージと比べ、1.5 ~ 3 倍パフォーマンスが向上します。 (アプリケーション開発者ガイド- 基礎編 動的SQLより) 同じ文を繰り返すときは解析し直すので遅くなります。 例) BEGIN vSQL := 'UPDATE tablename_' || '0411' || ~ EXECUTE IMMEDIATE vSQL; ・・・ END;

ike_aqc
質問者

お礼

ありがとうございます。 とりあえずテストは成功しました。 これで対応できるか検証してみます。

関連するQ&A