2010年8月24日

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

ひらつかです。

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


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




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