重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

表名にYYMMなどがついているケースで、
動的に表名を使用したいのですが、
INSERTやUPDATE文で動的に表名を
使用する方法をご教授願えませんか?

環境はOracle9iのpl/sqlです。

宜しく御願い致します。

A 回答 (3件)

こんにちは。



DBMS_SQLパッケージか、IMMEDIATEを使います。
IMMEDIATEはDBMS_SQLに比べて、オーバーヘッドが多いようです・・・。
(^^ゞ
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/11/15 16:14

こんにちは。



>>表名の場合のやり方は特別なのでしょうか?
いいえ、一緒ですよ。
変数でも何でもいいです(実行時に解析するので、コンパイルではエラーになりません)。

>>表名の場合、ORA-0903のエラーが出ました。
うーん、Oracleのエラーは5桁なんですが・・・。
何のエラーなんでしょう?
(^^ゞ
    • good
    • 0
この回答へのお礼

とりあえずIMMEDIATEの方でやってみます。

ありがとうございました。

お礼日時:2004/11/15 18:33

「単発」の動的SQLであれば


EXECUTE IMMEDIATE 'SQL文' または 変数
の方がDBMS_SQLパッケージと比べ、1.5 ~ 3 倍パフォーマンスが向上します。
(アプリケーション開発者ガイド- 基礎編 動的SQLより)
同じ文を繰り返すときは解析し直すので遅くなります。

例)
BEGIN
vSQL := 'UPDATE tablename_' || '0411' || ~
EXECUTE IMMEDIATE vSQL;
・・・
END;
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/11/15 16:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す