상세 컨텐츠

본문 제목

Cursor Output 매개 변수

DataBase/SQL Server

by 탑~! 2014. 2. 25. 20:34

본문

프로시저 실행 시 cursor Output 매개 변수에는 다음 규칙이 적용됩니다.

  • 정방향 전용 커서의 경우, 저장 프로시저의 실행이 끝났을 때 커서의 결과 집합에는 커서 위치와 같거나 이보다 뒤에 있는 행만 반환됩니다. 예를 들면 다음과 같습니다.

    • 비스크롤형 커서는 프로시저에서 100개의 행이 있는 RS라는 결과 집합에 열려 있습니다.

    • 프로시저는 RS 결과 집합의 처음 5개 행을 인출합니다.

    • 프로시저가 호출자에게 반환됩니다.

    • 호출자에게 반환된 RS 결과 집합은 6에서 100 사이인 RS의 행으로 구성되며 호출자의 커서는 RS의 첫 번째 행 앞에 놓입니다.

  • 정방향 전용 커서의 경우, 저장 프로시저의 실행이 끝났을 때 커서가 첫 번째 행보다 앞에 있으면 호출한 일괄 처리, 저장 프로시저, 트리거에 전체 결과 집합이 반환됩니다. 반환될 때 커서 위치는 첫 번째 행 앞으로 설정됩니다.

  • 정방향 전용 커서의 경우, 저장 프로시저의 실행이 끝났을 때 커서가 마지막 행보다 뒤에 있으면 호출한 일괄 처리, 저장 프로시저, 트리거에 빈 결과 집합이 반환됩니다.

    참고참고

    빈 결과 집합은 Null 값과 다릅니다.

  • 스크롤형 커서의 경우, 저장 프로시저의 실행이 끝났을 때 결과 집합의 모든 행이 호출한 일괄 처리, 저장 프로시저, 트리거에 반환됩니다. 반환될 때 커서 위치는 프로시저에서 마지막으로 실행된 인출 위치가 됩니다.

  • 커서의 종류에 관계없이 커서를 닫으면 호출한 일괄 처리, 저장 프로시저, 트리거에 Null 값이 전달됩니다. 매개 변수에 커서를 할당했지만 해당 커서를 전혀 열지 않은 경우도 마찬가지입니다.

    참고참고

    커서의 닫힌 상태는 반환 시에만 문제가 됩니다. 예를 들어 프로시저를 통해 커서를 일부 닫은 후 프로시저에서 나중에 다시 열어 호출한 일괄 처리, 저장 프로시저, 트리거에 커서의 결과 집합을 반환하는 것은 유효합니다.


USE AdventureWorks2008R2;
GO
IF OBJECT_ID ( 'dbo.uspCurrencyCursor', 'P' ) IS NOT NULL
    DROP PROCEDURE dbo.uspCurrencyCursor;
GO
CREATE PROCEDURE dbo.uspCurrencyCursor 
    @CurrencyCursor CURSOR VARYING OUTPUT
AS
    SET NOCOUNT ON;
    SET @CurrencyCursor = CURSOR
    FORWARD_ONLY STATIC FOR
      SELECT CurrencyCode, Name
      FROM Sales.Currency;
    OPEN @CurrencyCursor;
GO

USE AdventureWorks2008R2;
GO
DECLARE @MyCursor CURSOR;
EXEC dbo.uspCurrencyCursor @CurrencyCursor = @MyCursor OUTPUT;
WHILE (@@FETCH_STATUS = 0)
BEGIN;
     FETCH NEXT FROM @MyCursor;
END;
CLOSE @MyCursor;
DEALLOCATE @MyCursor;
GO


출처: msdn


관련글 더보기