- ベストアンサー
表名を動的SQLで
表名にYYMMなどがついているケースで、 動的に表名を使用したいのですが、 INSERTやUPDATE文で動的に表名を 使用する方法をご教授願えませんか? 環境はOracle9iのpl/sqlです。 宜しく御願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 DBMS_SQLパッケージか、IMMEDIATEを使います。 IMMEDIATEはDBMS_SQLに比べて、オーバーヘッドが多いようです・・・。 (^^ゞ
その他の回答 (2)
- taka451213
- ベストアンサー率47% (436/922)
回答No.3
こんにちは。 >>表名の場合のやり方は特別なのでしょうか? いいえ、一緒ですよ。 変数でも何でもいいです(実行時に解析するので、コンパイルではエラーになりません)。 >>表名の場合、ORA-0903のエラーが出ました。 うーん、Oracleのエラーは5桁なんですが・・・。 何のエラーなんでしょう? (^^ゞ
質問者
お礼
とりあえず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;
質問者
お礼
ありがとうございます。 とりあえずテストは成功しました。 これで対応できるか検証してみます。
お礼
さっそくの回答、ありがとうございます。 列の値などは、DBMS_SQLパッケージでできたのですが、 表名の場合、ORA-0903のエラーが出ました。 表名の場合のやり方は特別なのでしょうか? もしよろしければ、引き続き御教授下さい。