HPL/SQL - ALLOCATE CURSOR 문
HPL/SQL - ALLOCATE CURSOR 문
ALLOCATE CURSOR 문은 커서를 선언하고, 저장 프로시저가 반환한 결과 집합(result set)에 그 커서를 연결하는 데 사용해요. 저장 프로시저를 호출하고 나온 결과를 프로그래밍적으로 순회할 때 아주 유용합니다.
출처: 문서
본문
ALLOCATE CURSOR 문은 커서를 선언하고 이를 저장 프로시저가 반환한 결과 집합에 연결합니다.
구문(Syntax):
ALLOCATE cursor_name CURSOR FOR PROCEDURE procedure_name; -- Teradata 호환
|
ALLOCATE cursor_name CURSOR FOR RESULT SET locator_name; -- DB2 호환
예제 1:
하나의 결과 집합을 반환하는 저장 프로시저 예시:
CREATE PROCEDURE spOpenIssues
DYNAMIC RESULT SETS 1
BEGIN
DECLARE cur CURSOR WITH RETURN FOR
SELECT id, name FROM issues;
OPEN cur;
END;
저장 프로시저를 호출하고 반환된 결과 집합을 처리합니다(Teradata 호환):
DECLARE id INT;
DECLARE name VARCHAR(30);
CALL spOpenIssues;
ALLOCATE c1 CURSOR FOR PROCEDURE spOpenIssues;
FETCH c1 INTO id, name;
WHILE (SQLCODE = 0)
DO
PRINT id || ' - ' || name;
FETCH c1 INTO id, name;
END WHILE;
CLOSE c1;
저장 프로시저를 호출하고 반환된 결과 집합을 처리합니다(IBM DB2 호환):
DECLARE id INT;
DECLARE name VARCHAR(30);
DECLARE loc RESULT_SET_LOCATOR VARYING;
CALL spOpenIssues;
ASSOCIATE RESULT SET LOCATOR (loc) WITH PROCEDURE spOpenIssues;
ALLOCATE c1 CURSOR FOR RESULT SET loc;
FETCH c1 INTO id, name;
WHILE (SQLCODE = 0)
DO
PRINT id || ' - ' || name;
FETCH c1 INTO id, name;
END WHILE;
CLOSE c1;
예제 2:
여러 개의 결과 집합을 반환하는 저장 프로시저 예시:
CREATE PROCEDURE spOpenIssues2
DYNAMIC RESULT SETS 2
BEGIN
DECLARE cur CURSOR WITH RETURN FOR
SELECT id, name FROM issues;
DECLARE cur2 CURSOR WITH RETURN FOR
SELECT id, name FROM issues_hold;
OPEN cur;
OPEN cur2;
END;
저장 프로시저를 호출하고 2개의 결과 집합을 처리합니다(Teradata 호환):
DECLARE id INT;
DECLARE name VARCHAR(30);
CALL spOpenIssues2;
-- 첫 번째 결과 집합
ALLOCATE c1 CURSOR FOR PROCEDURE spOpenIssues2;
FETCH c1 INTO id, name;
WHILE (SQLCODE = 0)
DO
-- ...
FETCH c1 INTO id, name;
END WHILE;
CLOSE c1;
-- 두 번째 결과 집합
ALLOCATE c2 CURSOR FOR PROCEDURE spOpenIssues2;
FETCH c2 INTO id, name;
WHILE (SQLCODE = 0)
DO
-- ...
FETCH c2 INTO id, name;
END WHILE;
CLOSE c2;
저장 프로시저를 호출하고 2개의 결과 집합을 처리합니다(IBM DB2 호환):
DECLARE id INT;
DECLARE name VARCHAR(30);
DECLARE loc1 RESULT_SET_LOCATOR VARYING;
DECLARE loc2 RESULT_SET_LOCATOR VARYING;
CALL spOpenIssues2;
ASSOCIATE RESULT SET LOCATOR (loc1, loc2) WITH PROCEDURE spOpenIssues2;
-- 첫 번째 결과 집합
ALLOCATE c1 CURSOR FOR RESULT SET loc1;
FETCH c1 INTO id, name;
WHILE (SQLCODE = 0)
DO
-- ...
FETCH c1 INTO id, name;
END WHILE;
CLOSE c1;
-- 두 번째 결과 집합
ALLOCATE c2 CURSOR FOR RESULT SET loc2;
FETCH c2 INTO id, name;
WHILE (SQLCODE = 0)
DO
-- ...
FETCH c2 INTO id, name;
END WHILE;
CLOSE c2;
호환성(Compatibility): IBM DB2 및 Teradata
참고(See also):
- OPEN
- FETCH
- CLOSE
- SQLCODE
더 알아보기 (Learn more)
ALLOCATE CURSOR 문은 저장 프로시저 결과를 커서로 다루기 위한 기능이에요. 커서를 여는 OPEN, 행을 읽는 FETCH, 닫는 CLOSE 문과 함께 사용하세요. Teradata뿐 아니라 DB2의 RESULT_SET_LOCATOR 방식도 지원합니다.