IT Log

[SQL Server] Functions - Cursor 함수 본문

SQL/SQL Server

[SQL Server] Functions - Cursor 함수

newly0513 2022. 1. 25. 13:36
728x90
반응형

Cursor 함수

@@CURSOR_ROWS

  • 열려있는 마지막 커서에서 한정하는 행 수를 반환
  • 마지막 Cursor가 비동기적으로 열린 경우 음수를 반환
반환 값 설명
-m 커서가 비동기식으로 채워짐. 반환되는 값은 현재 키 집합에 있는 행의 개수
-1 동적 커서. 모든 변경사항을 반영하므로 커서가 한정하는 행의 수는 계속 변함.
0 열린 커서가 없거나 마지막으로 열린 커서에 한정된 행이 없거나 닫히거나 할당 취소됨
n 커서가 완전히 채워짐. 반환되는 값은 커서에 있는 행의 총 개수

 

@@CURSOR_ROWS

 

예시

USE AdventureWorks2012;  
GO  
SELECT @@CURSOR_ROWS;          -- 열린커서가 없으므로, 0
DECLARE Name_Cursor CURSOR FOR  
SELECT LastName ,@@CURSOR_ROWS FROM Person.Person;  
OPEN Name_Cursor;  
FETCH NEXT FROM Name_Cursor;  
SELECT @@CURSOR_ROWS;          -- 커서가 비동기식으로 채워짐, -1 
CLOSE Name_Cursor;  
DEALLOCATE Name_Cursor;  
GO

@@FETCH_STATUS

  • 모든 커서에 전역으로 적용되므로 주의
반환 값 설명
0 FETCH 문이 성공적으로 수행
-1 FETCH 문이 실패했거나 행이 결과 집합의 범위를 벗어남
-2 인출된 행이 없음
-9 CURSOR는 FETCH 작업을 수행하지 않음
@@FETCH_STATUS
 

예시

DECLARE Employee_Cursor CURSOR FOR  
SELECT BusinessEntityID, JobTitle  
FROM AdventureWorks2012.HumanResources.Employee;  
OPEN Employee_Cursor;  
FETCH NEXT FROM Employee_Cursor;  
WHILE @@FETCH_STATUS = 0  -- 0은 정상수행
   BEGIN  
      FETCH NEXT FROM Employee_Cursor;  
   END;  
CLOSE Employee_Cursor;  
DEALLOCATE Employee_Cursor;  
GO

CURSOR_STATUS

  • 특정 매개 변수에 대해 커서 선언이 커서 및 결과 집합을 반환했는지 여부
반환 값 커서 이름 커서 변수
1 결과 집합에 최소 한 개의 행이 있음 할당된 커서가 열려 있음. 동적 커서의 경우 결과 집합에는 0개, 1개 또는 그 이상의 행이 있음
'INSENSITIVE' 또는 'KEYSET'커서의 경우 결과 집합에 최소한 한 개의 행이 있음
0 커서 결과 집합이 비어 있음 커서는 열려있지만 결과 집합은 확실히 비어 있음
-1 커서가 닫혀 있음 변수에 할당된 커서가 닫혀 있음
-2 해당 사항 없음 커서를 할당하지 않았거나, 커서가 닫힌 상태
-3 지정된 이름의 커서가 없음 커서 변수가 없거나 있는 경우에는 아직 할당되지 않음
CURSOR_STATUS   
     (  
          { 'local' , 'cursor_name' }   
          | { 'global' , 'cursor_name' }   
          | { 'variable' , 'cursor_variable' }   
     )

 

예시

CREATE TABLE #TMP  
(  
   ii INT  
)  
GO  
  
INSERT INTO #TMP(ii) VALUES(1)  
INSERT INTO #TMP(ii) VALUES(2)  
INSERT INTO #TMP(ii) VALUES(3)  
  
GO  
  
--Create a cursor.  
DECLARE cur CURSOR  
FOR SELECT * FROM #TMP  
  
--Display the status of the cursor before and after opening  
--closing the cursor.  
  
SELECT CURSOR_STATUS('global','cur') AS 'After declare'  -- 오픈 전이므로, -1
OPEN cur  
SELECT CURSOR_STATUS('global','cur') AS 'After Open'     -- 오픈 후여서, 1
CLOSE cur  
SELECT CURSOR_STATUS('global','cur') AS 'After Close'    -- 오픈이 닫혔으므로, -1
  
--Remove the cursor.  
DEALLOCATE cur  
  
--Drop the table.  
DROP TABLE #TMP

참조 URL : https://docs.microsoft.com/ko-kr/sql/t-sql/functions/cursor-functions-transact-sql?view=sql-server-ver15

728x90
반응형

'SQL > SQL Server' 카테고리의 다른 글

[SQL Server] 흐름제어(Control-of-Flow)  (0) 2022.02.08
[SQL Server] Functions - 논리 함수  (0) 2022.02.08
[SQL Server] CURSOR  (0) 2022.01.25
[SQL Server] Functions - 변환 함수  (0) 2022.01.20
[SQL Server] Functions - 문자열 함수  (0) 2022.01.20
Comments