MySQL에서 동적 SQL로 커서 만들기
커서를 테이블에 연 다음 모든 레코드를 반복하는 저장 프로 시저를 작성하고 있습니다. 반복 프로세스에서 첫 번째 커서의 결과를 기반으로 동적 쿼리를 만듭니다. 동적 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
'Database > mysql procedure, function' 카테고리의 다른 글
MySQL 프로시저 loop, fetch, cursor 사용하기 (0) | 2021.04.06 |
---|---|
MySQL 프로시저 생성 (테이블 백업) 및 이벤트 스케쥴러 등록,삭제 (0) | 2021.04.06 |
MySQL function 만들기 (0) | 2021.04.06 |
[mysql] 커서(CORSUR) 간단 예제 (0) | 2021.04.06 |
[mysql] 프로시저 예제 Cursor 사용 (0) | 2021.04.06 |
MySQL 프로시저 loop, fetch, cursor 사용하기 (0) | 2021.04.06 |