mysql:15383
From: こんにちは伊藤です <こんにちは伊藤です <ito.takahiro.cp@xxxxxxxxxx>>
Date: Tue, 24 Aug 2010 15:37:06 +0900
Subject: [mysql 15383] Re: カーソルのネストについて
伊藤です とりあえず、別方法でいきます。 ネストを使わず、出来そうな感じもしてます。 TO:ひらつかさん > ・DECLAREは最初に全部書くこと [お返事] これがわかっていませんでした。 ありがとうございました。<(_ _)> On Tue, 24 Aug 2010 15:20:21 +0900 HIRATSUKA Sadao <hiratsuka.sadao@xxxxxxxxxx> 様から以下のようなメールをいただきました。。: > ひらつかです。 > > 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 > > ------------------------------------------------- 伊藤崇洋 ito.takahiro.cp@xxxxxxxxxx -------------------------------------------------
15380 2010-08-23 21:13 [こんにちは伊藤です <] カーソルのネストについて 15382 2010-08-24 15:20 ┗[HIRATSUKA Sadao <hir] -> 15383 2010-08-24 15:37 ┗[こんにちは伊藤です <]