• 締切済み

PL/SQLでFROM句に変数を使いたい

PL/SQL初心者なので方法があるかないかもわかりません。 SELECT TABLE_NAME FROM USER_TABLES で取得したテーブルを PQL文に使用したいのですが可能ですか? 一応動的(DBMS_SQLを使用した方法)にSQLを作成することはできたのですが パフォーマンスを考えると静的に使用したいのです。 動的、静的の表現でいいのかわかりませんが普通に PL/SQL中にSQL文を使いたいんですがいかがでしょうか?

みんなの回答

  • msystem
  • ベストアンサー率42% (79/186)
回答No.4

再びです。 はっきり結論付けなくてすみません。 完全に否定したわけではありませんが、以前サポートに似た質問をしたところできないといわれました。 あとパフォーマンス的にとおっしゃっていますが、作り方によりますが、SQL文のアクセスパスパスが決まらないのは、PL/SQL内の固定SQL文も、動的SQL文も同じだと思います。差が出るのは、SQL文自身の解析が、固定SQL文と動的SQL文の違いになると思いますが、以前テストしてみたら、その部分は大きな差はなかったと思いますが・・・。 いずれにしても、たいした力になれなくて申し訳ありません。

  • msystem
  • ベストアンサー率42% (79/186)
回答No.3

PL/SQLで、DROP文等のDDL文を使いたいときは、DBMS_SQLパッケージを使用する必要があります。テーブル名を変数にしたいときも同じことです。 DBMS_SQLパッケージは、PL/SQLパッケージの中では割とよく使うパッケージなので、多くの情報が得られると思います。 調べてみてください。

Hk2001
質問者

お礼

アドバイスありがとうございます。 質問中でも書きましたが DBMS_SQLパッケージでの実行は、動作確認済みです。 文章内容から推測すると「できない」ということになるのでしょうか? ない頭なりに考えて、 UTL_FILE.PUT_LINEを使いPL/SQLの関数を作成してしまえばとも 考えましたが、結局 コンパイル時に解析しなくてはならず一緒ですね。

  • sueoka
  • ベストアンサー率38% (24/62)
回答No.2

も一度こんばんわ うーん、これは難しいような気がします とは言っても僕も大して経験があるわけではないので、 「絶対に不可能」とは言い切れませんが・・・ 少なくとも僕の知識の範疇では無理そうです。 カーソルうんぬん・・・と言うことであれば、 FETCHして取得したテーブル名を IF文で条件分岐してその中でそれぞれの処理を行う・・・ と言うくらいしか僕には思いつきません。 うーん、お役に立てなくて、すみませんね

Hk2001
質問者

お礼

アドバイスありがとうございます。 相談した人もそのようなこといってました。 テーブル名というのが たとえば 受注YYYYという形で 後ろ4桁が年になっているんです。 実用年数を考えるとIF文でもいいような気がしますが、 システム会社への納品物なのであんまりなソースになってしまい NGくらいそうなので

  • sueoka
  • ベストアンサー率38% (24/62)
回答No.1

こんばんわ FROM句に使いたい・・・と言うことは、 user_tablesから得られたテーブルに対して 何か処理を行いたいということですか? ※処理対象のテーブルが毎回異なるということですか? もう少し詳しく(具体的に)やりたい内容を 教えて戴けませんでしょうか? ※取得したテーブル名に対して何を行いたいのか、など もしかしたら、アドバイスくらいなら出来るかもしれません それでは

Hk2001
質問者

補足

説明不足でしたかすみません えっと まず user_tablesから得たTABLE_NAMEをカーソルを使い 1件ずつフェッチして そのテーブルにたいして SELECTやDELETE、DROPなどの処理をしたいのです。 ということで >処理対象のテーブルが毎回異なるということですか? そのとうりです。 アドバイスお願いします。

関連するQ&A