重要なお知らせ

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

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

SQLServerにて下記のようなストアドを作成しレスポンス改善を行いました。
 ALTER PROC sp_Sql @sql ntext
  AS
 execute(@sql)
内容は単純で引数で渡したSQL文をストアド側にて実行するという内容です。
こちらをORACLE上(PL SQL)で同様の処理を行いレスポンス改善したいと思っております。
知識が不足しており移植することが出来ていません。誰か助けて頂けませんでしょうか。

A 回答 (3件)

#1 です。



まず、#2 さんの回答を見てください。
ストアドにすればレスポンスが改善する、と言う認識自体
が(少なくともORACLEにおいては)疑問です。
移行処理とは、そっくりそのままを移行するのではなく、
移行先の仕様に合わせて、適材適所に最適化していく
必要があります。
以上を踏まえて、以下は想像で書きます。

MSSQLでやっていた処理で渡すSQLはSELECT文ですよね?
で、ストアドでexecしたものを、呼び出し側でADOやDAOで、
レコードセットとして受けていたものと思います。
(この手法自体はよくやりますね、MSSQLを使う時は)

結論から書くと、#1で書いた通り、ORACLEではこれは
できないんです。
PL/SQL内部で SELECT * FROM TBL; と言う文は実行
できないんです。

なので、動的カーソルにしてカーソル変数で返すとか、
配列(PL/SQL表など)で返すとか、いずれにせよ、
ストアド呼び出し側ではOUTパラメータで受ける必要が
あります。

で、さらに意地の悪い事を書きますが、ここまで苦労
しても、#2 さんも書かれている通り、レスポンス改善
には多分つながらないと思います。

パフォーマンスチューニングの観点から言えば、

*ネットワーク/ハードウェアの見直し
*DBリソースチューニング
*INDEXの見直しや統計情報の取得(効果的)
*SQL自体のチューニング(効果的)

に留めをさします。

渡すSQLが更新DMLなら executeでOKですよ。
    • good
    • 0
この回答へのお礼

ありがとうございました。
SQLServerで出来たのでORACLEでも可能だと思ってましたが不可能なんですね。大変ためになりました。

お礼日時:2005/01/11 17:11

SQLserverで、何故レスポンスが改善するか、存じませんが..


Oracleで同じ事をやってもレスポンスの向上が図れるような気がしません。

どうしてもやってみたいと言うことであれば、不定数の結果フィールドを受け取れる
DBMS_SQLパッケージで実現できると思います。
(execute immediateは、不定カラムだとFETCHできない)
    • good
    • 0

動的SQL は



9i なら execute immediate
それ以前なら dbms_sqlパッケージ

を使用します。

ただし、素のselect文は
PL/SQL内では実行できません。

詳細はマニュアルで。
なければotnで。

参考URL:http://otn.oracle.co.jp
    • good
    • 0
この回答へのお礼

さっそくの回答ありがとうございます。
execute immediateを使用したPL/SQLを作成して色々ためしたんですが、やはりうまく出来ませんでした。何かサンプルコードなどありませんでしょうか。ド素人のため申し訳ありません。また、SQL文自体をCHARでPL/SQLに渡して実行させたいと思っております。

お礼日時:2005/01/11 15:08

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