こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

MYSQL ストアドプロシージャの記述方法

MYSQLのストアドプロシージャについて分からないことがあり質問させて頂きます。

SQLのwhere句の部分を引数によって条件分で変更させたいと考えています。そこでORACLEの場合は変数にいれて最後に明示的にSQLを発行して
いたので可能だったのですが、MYSQLの場合はどういった記述になる
のかわかりません。やりたいことは下記のような感じです。

ORACLEの場合は

procedure prctest(pc out refcur,a in varchar2,b in varchar2)
is
sqldata varchar2(1000);
whereinfo varchar2(1000);
begin
sqldata := 'select ID , NAME from testTbl ';

if (a IS NOT NULL) then
  whereinfo := whereinfo || ' acol = a ' ;
end if;

if (b IS NOT NULL) then
  if (whereinfo IS NOT NULL) then
 whereinfo := whereinfo || ' and ';
  end if;
  whereinfo := whereinfo || ' acol = b ' ;
end if;

if (whereinfo IS NOT NULL) then
 sqldata := sqldata || ' where ' || whereinfo ;
end if;

open pc for sqldata; (ここでSQLが入ったSQLを発行)

end prctest;
(抜粋)

ストアドをあまり使用したことがなく良い説明ではないかも
しれませんが、アドバイスの方頂けたらと思います。
よろしくお願いします。

投稿日時 - 2007-12-14 17:26:28

QNo.3598157

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

何が分からないのか、具体的に示せませんか?

(1)MySQLのバージョンは、5.0以降を使用していますね?
(2)SQL文を文字列で組み立てて実行する方法が分からないのですか?
 →もしそうならば、PREPARE文とEXECUTE文を使用します。
  ただし、この場合、カーソルで操作といったことはできません。
(3)今回のような条件分岐なら、文字列を組み立てる方法でなくても可能です。
 →この場合、カーソル操作は可能です。
(4)ストアドプロシジャ内の処理結果を、呼び出し側で受け取りたいなら、引数で返すとか、作業用の表にINSERTするとか、工夫が必要です。

投稿日時 - 2007-12-15 00:34:55

補足

分かりずらい質問で申し訳ございませんが、
ご返答ありがとうございます。

回答を確認しまして私の方もご返答させて頂きます。
一番の疑問点は条件分岐したSQLをうまく使用してそのまま呼び出し側
に結果データ返したいということです。(カーソル操作や文字列操作はできなくてもとは思っていました。)

(1)MYSQL5.0以降です。
(2)SQL文を文字列で組み立てて実行する方法も分かっていません。
(3)文字列の組み立てる方法でなくても条件分岐が使用可能ということ  ですが、教えていただけますと非常に助かります。

またプログラム側はPHPでPDO接続しているのですが、
プログラム側で下記のようなプロシージャをCALLすると
全行取得できるので、この要領で条件分岐させた場合の
データも取得できないかと考えていました。
delimiter //
CREATE PROCEDURE proctest ( )
BEGIN
select * from testTbl;
END
//

たびたび申し訳ありませんが、よろしくお願いします。

投稿日時 - 2007-12-15 12:26:46

あなたにオススメの質問