1. 커서의 역할:
선택 시 결과 세트를 반환하는 과정에서 데이터 행을 읽어야 하는 경우. 이 데이터 행은 읽은 데이터를 기반으로 쿼리 결과 세트를 쿼리 조건으로 반환하는 등 처리해야 합니다. 애플리케이션은 커서를 사용해야 합니다.
커서를 사용하면 사용자는 다음 행, 이전 행, 첫 번째 행 또는 마지막 행을 쿼리하고 이러한 읽은 행을 처리할 수 있습니다.
2. 커서 예시
CREATE FUNCTION GetMRPlnFullBom - 문서 키를 기준으로 문서의 각 행을 쿼리하고 각 행의 데이터를 처리하는 함수를 만듭니다.
(
DocEntry int,
LineNum int,
LineNumLevel nvarchar(100),
ItmID nvarchar(20),
ItmName nvarchar(100),
LineType char(1),
수량 숫자(19,9),
BomLevel int,
ParentEntry int,
ParentItmID nvarchar(20),
TopEntry int,
TopItmID nvarchar(20),
BaseEntry int,
BaseLineNum int ,
BaseType int
)
AS
BEGIN
@Itm ID varchar(50) 선언 , @ Qty int ,@LineNum int ,@ObjType int --지역 변수 선언
--커서 선언 시 다음 MRPlnA_ItmID와 같이 XXX 앞에 @를 추가할 수 없으며 형식은 DECLARE입니다. XXX CURSOR FOR
DECLARE MRPlnA_ItmID CURSOR FOR
SELECT ItmID , Qty ,LineNum , ObjType FROM MRPlnA 여기서 DocEntry = @DocEntry --문은 DECLARE XXX CURSOR FOR와 OPEN XXX 사이에 있어야 합니다.
Open MRPlnA_ItmID --커서 열기
FETCH NEXT FROM MRPlnA_ItmID INTO @ItmID , @Qty ,@LineNum , @ObjType --FETCH NEXT FROM XXX INTO ... 커서 사양 업데이트 레코드 및 Wrap 을 사용하고 선택한 데이터를 임시 변수에 저장합니다. NEXT 외에도 FETCH 형식에는 PRIOR, FRIST 및 LAST도 포함됩니다. 이전 줄, 첫 번째 줄, 마지막 줄입니다.
WHILE @@FETCH_STATUS = 0 --@@FETCH_STATUS 전역 변수, FETCH의 마지막 상태를 쿼리하고 루프를 제어하는 데 사용됩니다. 읽기가 완료되면 0, 읽기에 실패하면 -1, 레코드가 삭제되면 -2입니다.
시작
@TAB에 삽입
DocEntry,LineNum,LineNumLevel,ItmID,ItmName,LineType,Qty*@Qty,BomLevel,ParentEntry,
ParentItmID,TopEntry,TopItmID , @DocEntry SourceEntry ,@LineNum BaseLineNum ,@ObjType BaseType From GetBomFullItems(@ItmID, 'V 1.0', GetDate()) TD --GetBomFULLItmes는 또 다른 쿼리 함수입니다. MRPlnA_ItmID INTO @ItmID , @Qty ,@LineNum , @ObjType -- 선택하면 다음 줄로 이동합니다. END CLOSE MRPlnA_ItmID --커서 닫기 DEALLOCATE MRPlnA_ItmID --커서 해제 RETURN END