커서 술어
커서 술어는 현재 범위 내에서 정의된 커서의 상태를 판별하는 데 사용할 수 있는 SQL 키워드입니다. 이는 커서가 열려 있거나 닫혀 있는지 여부 또는 커서와 연관된 행이 있는지 쉽게 참조하는 방법을 제공합니다.
- 커서 변수 이름
- 커서 유형의 SQL 매개변수 또는 SQL 변수의 이름입니다.
- IS
- 커서 술어 특성이 테스트된다는 것을 지정합니다.
- NOT
- 커서 술어 특성을 테스트하는 반대값이 리턴된다는 것을 지정합니다.
- FOUND
- FETCH문의 실행 이후 커서에 행이 포함되는지 확인하기 위해
지정합니다. 실행된 마지막 FETCH문이 성공적이고
IS FOUND 술어 구문이 사용되는 경우, 리턴된 값은
TRUE입니다. 마지막
FETCH문이 실행되어 행을 찾을 수 없다는 조건을 초래한 경우
결과는 거짓입니다. 다음 경우에는 결과를 알 수 없습니다.
- cursor-variable-name의 값이 NULL임
- cursor-variable-name의 기본 커서가 열려 있지 않음
- 기본 커서에서 첫 번째 FETCH 조치가 수행되기 전에 술어가 평가됨
- 마지막 FETCH 조치가 오류를 리턴함
구문이 IS NOT FOUND가 되도록 NOT 키워드가 지정될 때, 결과 값은 반대입니다.
- OPEN
- 커서가 열린 상태인지 확인하기 위해 지정합니다. 커서가 열려 있고 IS OPEN 술어 구문이 사용되면 리턴된 값은 TRUE입니다. 이는 커서가 함수 및 프로시저에 매개변수로 전달되는 경우에 유용한 술어일 수 있습니다. 커서를 열려고 시도하기 전에, 이 술어를 사용하여 커서가 이미 열려 있는지 판별할 수 있습니다.
참고
- 커서 술어는 복합 SQL(컴파일된) 명령문 내의 명령문에서만 사용될 수 있습니다(SQLSTATE 42818).
예
다음 스크립트는 프로시저를 성공적으로 컴파일하고 호출하는 데 필요한 전제조건 오브젝트와 이러한 술어에 대한 참조가 포함된 SQL 프로시저를 정의합니다.CREATE TABLE T1 (c1 INT, c2 INT, c3 INT)@
INSERT INTO T1 VALUES (1,1,1),(2,2,2),(3,3,3) @
CREATE TYPE myRowType AS ROW(c1 INT, c2 INT, c3 INT)@
CREATE TYPE myCursorType AS myRowType CURSOR@
CREATE PROCEDURE p(OUT count INT)
LANGUAGE SQL
BEGIN
DECLARE C1 CURSOR;
DECLARE lvarInt INT;
SET count = -1;
SET c1 = CURSOR FOR SELECT c1 FROM t1;
IF (c1 IS NOT OPEN) THEN
OPEN c1;
ELSE
set count = -2;
END IF;
SET count = 0;
IF (c1 IS OPEN) THEN
FETCH c1 INTO lvarInt;
WHILE (c1 IS FOUND) DO
SET count = count + 1;
FETCH c1 INTO lvarInt;
END WHILE;
ELSE
SET COUNT = 0;
END IF;
END@
CALL p()@ 