[前][次][番号順一覧][スレッド一覧]

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  ┗[こんにちは伊藤です <]