MySQL에서 동적 SQL로 커서 만들기

2021. 4. 6. 01:43 Database/mysql procedure, function

커서를 테이블에 연 다음 모든 레코드를 반복하는 저장 프로 시저를 작성하고 있습니다. 반복 프로세스에서 첫 번째 커서의 결과를 기반으로 동적 쿼리를 만듭니다. 동적 SQL에서 커서를 열어야하는데 mysql의 공식 문서에 따르면 MySQL "커서는 핸들러를 선언하기 전에 선언해야합니다. 변수와 조건은 먼저 선언해야합니다. 커서 또는 핸들러 선언 " . 다음은 스크립트입니다.

 

DELIMITER $$

DROP PROCEDURE IF EXISTS sp_test$$

CREATE PROCEDURE `sp_test`()
BEGIN
    -- Declarations

    DECLARE prepared_sql VARCHAR(1000);
    DECLARE index_count INT;

    -- Cursors
    DECLARE cursor1 CURSOR FOR SELECT * from table1;
    -- Continue Handler for Cursor
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = TRUE;
    -- Open cursors
    OPEN cursor1;

    -- Business Logic
    all_alerts_loop: LOOP
        -- Fetch record from cursor1 and create a dynamic sql

        -- Check if cursor has reached to end than leave the loop
        IF no_more_rows THEN
            LEAVE all_alerts_loop;
        END IF;


        WHILE @some_other_variable <> 0
        DO
                              -- I want to open cursor 2 on this sql
            -- set @prepared_sql =  'create dynamic sql here';  
                    END WHILE;

                    -- This works fine
        PREPARE stmt FROM @prepared_sql;
        EXECUTE stmt;

                    -- But can't define cursor here? so what is the solution
                    -- Gives syntax error, I have tried with @prepared_sql also rather than stmt
        DECLARE cursor2 CURSOR FOR stmt;

    END LOOP;

    -- closing cursors
    CLOSE cursor1;
    END$$

DELIMITER ;

 

동적 쿼리를 위해 커서를 만드는 방법을 알고 계십니까? MYSQL에서

 

해결 방법

 

다른 프로 시저를 만들고이 새 프로 시저에 커서 코드를 작성한 다음 커서를 선언하려는 위치에서 프로 시저를 호출합니다.

 

참조 페이지 https://stackoverflow.com/questions/6082268

 

출처 : sql-factory.tistory.com/344