- PR -

ストアドプロシージャーについて

1
投稿者投稿内容
のの
ベテラン
会議室デビュー日: 2004/11/10
投稿数: 88
投稿日時: 2004-11-10 23:18


[ メッセージ編集済み 編集者: のの 編集日時 2004-11-11 22:53 ]
nori
常連さん
会議室デビュー日: 2003/12/16
投稿数: 34
お住まい・勤務地: 新幹線線路の隣
投稿日時: 2004-11-11 08:47
こんにちは。

引用:

ストアド内で使用できる条件分岐命令はIF文しか
ないのでしょうか?



case ... when というのがあります。


・・・ってストアドプロシージャ−ってSQLServerですかね?
Oracle等は触ったことがないので、わかりませんが、
SQLServerなら、上記のが使えると思います。バージョンによって違うのかもしれませんが。


データベースには限らないので、種類・ヴァージョンは書いて下さいな。
そうすると、他にも答えが付くと思いますよ。
未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2004-11-11 09:03
引用:

ストアド内で使用できる条件分岐命令はIF文しかないのでしょうか?


ツッコミどころ満載の質問ですね。

データベース製品に関する情報が一切書かれていないので何とも言えませんが…。T-SQL も PL/SQL も制御構文は貧弱です。if 文程度しかないと思って良いです。

それよりも、提示された例を見て思うのは「きっと設計自体が良くないのだろう」ということです。TblFlg で完全に別々の処理に分岐するのであれば、別々のストアドにしておいて、呼出元プログラムで分岐して必要なストアドを呼ぶようにしたらどうですか?

Table1, Table2, Table3 の構造が同じならひとつのテーブルにまとめてしまって、主キー列に TblFlg を追加するという方法もあるでしょう。

引用:

だったらストアドを使用せずに直接ソースに記述すれば
という訳にもいかないのです。(レスポンスをあげたい為)


ストアドプロシージャについて、なにか勘違いしていませんか? 良く分かっていない誰かに「速さが必要な処理はストアドで!」とか吹聴されてしまったのでしょうか。おそらく今回の例ではストアドを使ってもレスポンスは変わりませんよ?

レスポンス低下が発生する典型的な例は、サーバーカーソルを開いてクライアントでカーソル操作を行い結果セットの参照・更新を行う場合です。このような処理をストアドに置き換えるとカーソル操作のオーバーヘッドがなくなるので劇的に高速化されます。

今回の例のように、結果セットを取得するためのクエリがストアドに収まっているだけのような場合は、ストアドの恩恵はありません。プリコンパイルによりオプティマイザが実行プランを立てる必要がなくなるなどのメリットがありますが体感できる差ではないと思います。

もしも、取得した結果セットを画面表示や帳票出力に使用するのであれば、(ファイヤーホースモードで結果を取得することになると思うので)、動的クエリ文字列の発行とストアドの速度差は無いと思います。

素直に、クライアントプログラムで動的にクエリ文字列を組み立てて発行したほうが良いでしょう。
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2004-11-11 22:34
一点だけ。

引用:

未記入さんの書き込み (2004-11-11 09:03) より:
データベース製品に関する情報が一切書かれていないので何とも言えませんが…。T-SQL も PL/SQL も制御構文は貧弱です。if 文程度しかないと思って良いです。




PL/SQLにはCASE文があります。
未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2004-11-11 22:42
引用:

PL/SQLにはCASE文があります。


補足ありがとうございます。
Oracle は 8 までしか使ってなかったから…。最近、追加されたのかな。
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2004-11-12 22:59
引用:

未記入さんの書き込み (2004-11-11 22:42) より:
引用:

PL/SQLにはCASE文があります。


補足ありがとうございます。
Oracle は 8 までしか使ってなかったから…。最近、追加されたのかな。



Yes! 確か9iからだったと思います。

でも正直なところ、SELECT文などSQLの中で使えるのはありがたいですが、PL/SQLで使えるメリットがいまいち。
ELSIFを羅列すりゃいいじゃん、って思ってしまいます。
1

スキルアップ/キャリアアップ(JOB@IT)