mysql:15382
From: HIRATSUKA Sadao <HIRATSUKA Sadao <hiratsuka.sadao@xxxxxxxxxx>>
Date: Tue, 24 Aug 2010 15:20:21 +0900
Subject: [mysql 15382] Re: カーソルのネストについて
ひらつかです。 On Mon, 23 Aug 2010 21:13:26 +0900 こんにちは伊藤です <ito.takahiro.cp@xxxxxxxxxx> 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@xxxxxxxxxx
15380 2010-08-23 21:13 [こんにちは伊藤です <] カーソルのネストについて -> 15382 2010-08-24 15:20 ┗[HIRATSUKA Sadao <hir] 15383 2010-08-24 15:37 ┗[こんにちは伊藤です <]