커서 술어

커서 술어는 현재 범위 내에서 정의된 커서의 상태를 판별하는 데 사용할 수 있는 SQL 키워드입니다. 이는 커서가 열려 있거나 닫혀 있는지 여부 또는 커서와 연관된 행이 있는지 쉽게 참조하는 방법을 제공합니다.

Read syntax diagramSkip visual syntax diagramcursor-variable-nameISNOT FOUNDOPEN
커서 변수 이름
커서 유형의 SQL 매개변수 또는 SQL 변수의 이름입니다.
IS
커서 술어 특성이 테스트된다는 것을 지정합니다.
NOT
커서 술어 특성을 테스트하는 반대값이 리턴된다는 것을 지정합니다.
FOUND
FETCH문의 실행 이후 커서에 행이 포함되는지 확인하기 위해 지정합니다. 실행된 마지막 FETCH문이 성공적이고 IS FOUND 술어 구문이 사용되는 경우, 리턴된 값은 TRUE입니다. 마지막 FETCH문이 실행되어 행을 찾을 수 없다는 조건을 초래한 경우 결과는 거짓입니다. 다음 경우에는 결과를 알 수 없습니다.
  • cursor-variable-name의 값이 NULL임
  • cursor-variable-name의 기본 커서가 열려 있지 않음
  • 기본 커서에서 첫 번째 FETCH 조치가 수행되기 전에 술어가 평가됨
  • 마지막 FETCH 조치가 오류를 리턴함
IS FOUND 술어는 각 반복으로 페치를 수행하고 루핑하는 SQL PL 로직의 분할 영역 내에서 유용할 수 있습니다. 이 술어는 페치할 행이 남아 있는지 판별하는 데 사용할 수 있습니다. 이는 페치할 행이 더 이상 남아 있지 않은 경우 제기되는 오류 조건을 확인하는 조건 핸들러를 사용하는 효율적인 대안을 제공합니다.

구문이 IS NOT FOUND가 되도록 NOT 키워드가 지정될 때, 결과 값은 반대입니다.

OPEN
커서가 열린 상태인지 확인하기 위해 지정합니다. 커서가 열려 있고 IS OPEN 술어 구문이 사용되면 리턴된 값은 TRUE입니다. 이는 커서가 함수 및 프로시저에 매개변수로 전달되는 경우에 유용한 술어일 수 있습니다. 커서를 열려고 시도하기 전에, 이 술어를 사용하여 커서가 이미 열려 있는지 판별할 수 있습니다.

구문이 IS NOT OPEN이 되도록 NOT 키워드가 지정될 때, 결과 값은 반대입니다.

참고

  • 커서 술어는 복합 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()@