【问题标题】:How to handle multiple cursors during a procedure?如何在一个过程中处理多个游标?
【发布时间】:2018-08-16 17:59:51
【问题描述】:

我想使用在程序开始时声明的两个游标

这些是表格

人。

 ________________
| code | name    |
|   1  | Carlos  |
|   2  | Charles |
|   3  | Mary    |
|   4  | Jhon    |
|   5  | Jen     |
-----------------

类。

      ________________
    | code | desc       |
    |   1  | Java       |
    |   2  | PHP        |
    |   3  | Perl       |
    |   4  | Python     |
    |   5  | Javascript |
    -------------------

DECLARE R CURSOR FOR SELECT C.CODE FROM people;  
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done2 = TRUE;
DECLARE classes CURSOR FOR    SELECT DISTINCT a.CODE FROM classes;  
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done1 = TRUE;

给出两个循环,一个在另一个里面......

但我正在检索此消息:

处理程序声明后的游标声明......

DECLARE v_cdclass INT;
DELCARE v_codperson INT;
DROP TABLE IF EXISTS temp1;
CREATE TEMPORARY TABLE temp1 
(
  id  INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,  
  cdfunc         INT(11),
  class           INT
); 
OPEN R; 
    loop0: LOOP
         FETCH R INTO v_codperson; 
            IF done2 THEN
               LEAVE loop0;
            END IF;

            BLOCO2: BEGIN

              OPEN classes;      
                 loop1: LOOP    
                    FETCH classes INTO v_cdclass ;  
                    IF done1 THEN
                        LEAVE loop1;
                    END IF;
                        INSERT INTO temp1 
                        ( cdfunc,  class )
                        VALUES 
                        ( v_codperson , v_cdclass);  
                  END LOOP loop1;   
                CLOSE classes;        

            END BLOCO2;
    END LOOP ;      
CLOSE R; 
SELECT * FROM temp1;   

【问题讨论】:

    标签: mysql sql procedure cursors


    【解决方案1】:

    试试:

    ...
    DECLARE R CURSOR FOR SELECT C.CODE FROM TABLE1;  
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done2 = TRUE;
    ...
       BLOCO2: BEGIN
          DECLARE classes CURSOR FOR SELECT DISTINCT a.CODE FROM TABLE2;
          DECLARE CONTINUE HANDLER FOR NOT FOUND SET done1 = TRUE;
    ...
    

    【讨论】:

    • 获取Erro SQL (1413): Duplicate handler declared in the same block
    • 是的!但是外面的循环不起作用......只重复相同的值:(
    • @Carlos:更新您发布表格结构和一些示例数据的问题。
    • 我会问其他问题。感谢帮助我
    猜你喜欢
    • 1970-01-01
    • 2019-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多