- ベストアンサー
ORACLEでの実装方法が知りたいです。
SQLServerにて下記のようなストアドを作成しレスポンス改善を行いました。 ALTER PROC sp_Sql @sql ntext AS execute(@sql) 内容は単純で引数で渡したSQL文をストアド側にて実行するという内容です。 こちらをORACLE上(PL SQL)で同様の処理を行いレスポンス改善したいと思っております。 知識が不足しており移植することが出来ていません。誰か助けて頂けませんでしょうか。
- みんなの回答 (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ですよ。
その他の回答 (2)
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
SQLserverで、何故レスポンスが改善するか、存じませんが.. Oracleで同じ事をやってもレスポンスの向上が図れるような気がしません。 どうしてもやってみたいと言うことであれば、不定数の結果フィールドを受け取れる DBMS_SQLパッケージで実現できると思います。 (execute immediateは、不定カラムだとFETCHできない)
- utakataXEX
- ベストアンサー率69% (711/1018)
動的SQL は 9i なら execute immediate それ以前なら dbms_sqlパッケージ を使用します。 ただし、素のselect文は PL/SQL内では実行できません。 詳細はマニュアルで。 なければotnで。
- 参考URL:
- http://otn.oracle.co.jp
お礼
さっそくの回答ありがとうございます。 execute immediateを使用したPL/SQLを作成して色々ためしたんですが、やはりうまく出来ませんでした。何かサンプルコードなどありませんでしょうか。ド素人のため申し訳ありません。また、SQL文自体をCHARでPL/SQLに渡して実行させたいと思っております。
お礼
ありがとうございました。 SQLServerで出来たのでORACLEでも可能だと思ってましたが不可能なんですね。大変ためになりました。