70 likes | 357 Vues
커서의 선언 (DECLARE). 커서 열기 (OPEN). 커서에서 데이터 가져오기 (FETCH). WHILE 문으로 모든 행이 처리될 때까지 반복. 데이터 처리. 커서 닫기 (CLOSE). 커서의 해제 (DEALLOCATE). 3. Transact – SQL 고급 (cont). 커서 [Cursor] 테이블에서 여러 개의 행을 검색한 결과로 얻은 투플 집합을 한 투플씩 처리하기 위해 사용하는 메커니즘 결과 투플 집합에 대한 포인터 역할 . 커서의 처리 순서.
E N D
커서의 선언(DECLARE) 커서 열기(OPEN) 커서에서 데이터 가져오기(FETCH) WHILE 문으로 모든 행이 처리될 때까지 반복 데이터 처리 커서 닫기(CLOSE) 커서의 해제(DEALLOCATE) 3. Transact – SQL 고급(cont) • 커서[Cursor] • 테이블에서 여러 개의 행을 검색한 결과로 얻은 투플 집합을 한 투플씩 처리하기 위해 사용하는 메커니즘 • 결과 투플 집합에 대한 포인터 역할. • 커서의 처리 순서
3. Transact – SQL 고급(cont) • 커서 사용의 예 : 고객의 평균 키를 계산 • USE sqlDB GO DECLARE userTbl_cursor CURSOR GLOBAL FOR SELECT height FROM userTbl; OPEN userTbl_cursor; DECLARE @height INT DECLARE @cnt INT DECLARE @totalHeight INT SET @totalHeight = 0 SET @cnt = 0 FETCHNEXT FROM userTbl_cursor INTO @height WHILE @@FETCH_STATUS = 0 BEGIN SET @cnt = @cnt + 1 SET @totalHeight = @totalHeight + @height FETCHNEXT FROM userTbl_cursor INTO @height END CLOSE userTbl_cursor; DEALLOCATE userTbl_cursor;
3. Transact – SQL 고급(cont) • 커서문의 사용 방법 • DECLARE로 커서를 선언. • OPEN으로 커서를 불러온다. • FETCH로 레코드 집합을 읽는다. • WHILE 또는 IF 등의 제어문으로 필요한 구문을 조건가 함께 실행 • CLOSE로 커서를 닫는다. • DEALLOCATE로 커서 참조를 제거. • 커서 선언문의 구문형식 DECLARE cursor_name CURSOR [LOCAL | GLOBAL ] [ FORWARD_ONLY | SCROLL ] [ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ] [ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ] [ TYPE_WARNING ] FORselect_statement [ FOR UPDATE [OF column_name [, . . . N ] ] ]
3. Transact – SQL 고급(cont) • 커서의 종류 • 커서의 구현 방법에 따른 분류.
3. Transact – SQL 고급(cont) • 커서문의 사용 방법 (계속) • 커서 OPEN 문의 구조 OPEN { { [ GLOBAL ] cursor_name } | cursor_variable_name } • FETCH 문의 구조 FETCH [ [ NEXT | PRIOR | FIRST | LAST | ABSOLUTE {n | @nvar} | RELATIVE {n | @nvar} ] FROM ] {{ [GLOBAL] cursor_name } | @cursor_variable_name} [ INTO @variable_name [,...n] ] • 커서 CLOSE 문의 구조 CLOSE { { [ GLOBAL ] cursor_name } | cursor_variable_name }
3. Transact – SQL 고급(cont) • 커서[Cursor] (cont) • FETCH의 옵션. • NEXT : 이 옵션은 FETCH를 이용하여 행을 검색하는데 사용되는 기본 옵션. 결과 집합에서 바로 다음 행을 검색. • ABSOLUTE : 이 옵션은 ABSOLUTE{n}의 형식으로 사용되는데 n의 양수인 경우 결과집합의 맨 처음부터 n번째에 있는 행을 반환한다. 반대로 n이 음수인 경우는 맨 뒤부터 n번째에 있는 행을 반환. • RELATIVE : 이 옵션은 ABSOLUTE와 마찬가지 형식을 취하며, n이 양수인 경우 현재행으로 부터 n번째 뒤로 있는 행을 반환하다. 반대로 n이 음수인 경우는 현재 위치로부터 n번째 앞에 있는 행을 반환.
3. Transact – SQL 고급(cont) • 커서 사용 예 : • Northwind사에서 물건을 주문한 고객 중 합계가 5000 이상인 고객에게 좀더 빠른 Delivery를 제공하기 위해 Shipping을 DHL_Express를 이용하도록 업데이트 하는 예. • USE northWind GO DECLARE @Orderid int DECLARE Use_DHL_Express_Cursor CURSOR FOR SELECT distinct(o.orderid) orderid from orders o, [order details] od WHERE od.UnitPrice*od.quantity > 5000 AND o.orderid = od.orderid OPEN Use_DHL_Express_Cursor FETCHNEXT FROM Use_DHL_Express_Cursor INTO @Orderid WHILE @@FETCH_STATUS = 0 BEGIN UPDATE Orders SET shipVia = 4 WHERE OrderID = @OrderID FETCHNEXT FROM Use_DHL_Express_Cursor INTO @OrderID END