2010年8月24日

[mysql 15383] Re: カーソルのネストについて

伊藤です

とりあえず、別方法でいきます。
ネストを使わず、出来そうな感じもしてます。

TO:ひらつかさん
> ・DECLAREは最初に全部書くこと
[お返事]

これがわかっていませんでした。
ありがとうございました。<(_ _)>

On Tue, 24 Aug 2010 15:20:21 +0900
HIRATSUKA Sadao <hiratsuka.sadao@xxxxx> 様から以下のようなメールをいただきました。。:

> ひらつかです。
>
> On Mon, 23 Aug 2010 21:13:26 +0900
> こんにちは伊藤です <ito.takahiro.cp@xxxxx> wrote:
>
> > 初歩的な質問かも知れませんが、MySQLのストアドの中で
> > カーソルを利用する場合、カーソルのネストは出来ないものでしょうか?
>
> カーソルのネストは一応できます。
>
> ポイントは
> ・DECLAREは最初に全部書くこと
> ・HANDLERは一つしかないので自前でフラグ管理をすること
> です。
>
>
> > DECLARE CURS_B CURSOR FOR SELECT * FROM TBL_B WHERE この条件が動的
>
> この「動的」具合が問題で、
> パラメータのバインド値を変更することはできますが、
> 文字列処理をしてWHERE句を組み立てて使う方法は見つかりませんでした。
>
>
> DELIMITER //
> CREATE PROCEDURE test1()
> BEGIN
> DECLARE not_found INT DEFAULT 0;
> DECLARE v_deptno INT;
> DECLARE v_dname VARCHAR(14);
> DECLARE cur1 CURSOR FOR SELECT deptno FROM emp ORDER BY empno;
> DECLARE cur2 CURSOR FOR SELECT dname FROM dept WHERE deptno = v_deptno;
> DECLARE CONTINUE HANDLER FOR NOT FOUND SET not_found = 1;
>
> OPEN cur1;
> loop1: LOOP
> FETCH cur1 INTO v_deptno;
> IF not_found THEN
> CLOSE cur1;
> LEAVE loop1;
> END IF;
>
> OPEN cur2;
> loop2: LOOP
> FETCH cur2 INTO v_dname;
> IF not_found THEN
> SET not_found = 0; ← フラグを戻す
> CLOSE cur2;
> LEAVE loop2;
> END IF;
> INSERT INTO work (dname) VALUES (v_dname);
> END LOOP;
> END LOOP;
> END
> //
> DELIMITER ;
>
>
> よろしくお願いします。
>
> --
> 平塚貞夫 hiratsuka.sadao@xxxxx
>
>


-------------------------------------------------
伊藤崇洋
ito.takahiro.cp@xxxxx
-------------------------------------------------

投稿者 xml-rpc : 2010年8月24日 15:37
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/97900
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。