- - PR -
ストアドプロシージャーについて
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-11-10 23:18
[ メッセージ編集済み 編集者: のの 編集日時 2004-11-11 22:53 ] | ||||||||
|
投稿日時: 2004-11-11 08:47
こんにちは。
case ... when というのがあります。 ・・・ってストアドプロシージャ−ってSQLServerですかね? Oracle等は触ったことがないので、わかりませんが、 SQLServerなら、上記のが使えると思います。バージョンによって違うのかもしれませんが。 データベースには限らないので、種類・ヴァージョンは書いて下さいな。 そうすると、他にも答えが付くと思いますよ。 | ||||||||
|
投稿日時: 2004-11-11 09:03
ツッコミどころ満載の質問ですね。 データベース製品に関する情報が一切書かれていないので何とも言えませんが…。T-SQL も PL/SQL も制御構文は貧弱です。if 文程度しかないと思って良いです。 それよりも、提示された例を見て思うのは「きっと設計自体が良くないのだろう」ということです。TblFlg で完全に別々の処理に分岐するのであれば、別々のストアドにしておいて、呼出元プログラムで分岐して必要なストアドを呼ぶようにしたらどうですか? Table1, Table2, Table3 の構造が同じならひとつのテーブルにまとめてしまって、主キー列に TblFlg を追加するという方法もあるでしょう。
ストアドプロシージャについて、なにか勘違いしていませんか? 良く分かっていない誰かに「速さが必要な処理はストアドで!」とか吹聴されてしまったのでしょうか。おそらく今回の例ではストアドを使ってもレスポンスは変わりませんよ? レスポンス低下が発生する典型的な例は、サーバーカーソルを開いてクライアントでカーソル操作を行い結果セットの参照・更新を行う場合です。このような処理をストアドに置き換えるとカーソル操作のオーバーヘッドがなくなるので劇的に高速化されます。 今回の例のように、結果セットを取得するためのクエリがストアドに収まっているだけのような場合は、ストアドの恩恵はありません。プリコンパイルによりオプティマイザが実行プランを立てる必要がなくなるなどのメリットがありますが体感できる差ではないと思います。 もしも、取得した結果セットを画面表示や帳票出力に使用するのであれば、(ファイヤーホースモードで結果を取得することになると思うので)、動的クエリ文字列の発行とストアドの速度差は無いと思います。 素直に、クライアントプログラムで動的にクエリ文字列を組み立てて発行したほうが良いでしょう。 | ||||||||
|
投稿日時: 2004-11-11 22:34
一点だけ。
PL/SQLにはCASE文があります。 | ||||||||
|
投稿日時: 2004-11-11 22:42
補足ありがとうございます。 Oracle は 8 までしか使ってなかったから…。最近、追加されたのかな。 | ||||||||
|
投稿日時: 2004-11-12 22:59
Yes! 確か9iからだったと思います。 でも正直なところ、SELECT文などSQLの中で使えるのはありがたいですが、PL/SQLで使えるメリットがいまいち。 ELSIFを羅列すりゃいいじゃん、って思ってしまいます。 |
1