1 / 7

3. Transact – SQL 고급 (cont)

커서의 선언 (DECLARE). 커서 열기 (OPEN). 커서에서 데이터 가져오기 (FETCH). WHILE 문으로 모든 행이 처리될 때까지 반복. 데이터 처리. 커서 닫기 (CLOSE). 커서의 해제 (DEALLOCATE). 3. Transact – SQL 고급 (cont). 커서 [Cursor] 테이블에서 여러 개의 행을 검색한 결과로 얻은 투플 집합을 한 투플씩 처리하기 위해 사용하는 메커니즘 결과 투플 집합에 대한 포인터 역할 . 커서의 처리 순서.

tabib
Télécharger la présentation

3. Transact – SQL 고급 (cont)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 커서의 선언(DECLARE) 커서 열기(OPEN) 커서에서 데이터 가져오기(FETCH) WHILE 문으로 모든 행이 처리될 때까지 반복 데이터 처리 커서 닫기(CLOSE) 커서의 해제(DEALLOCATE) 3. Transact – SQL 고급(cont) • 커서[Cursor] • 테이블에서 여러 개의 행을 검색한 결과로 얻은 투플 집합을 한 투플씩 처리하기 위해 사용하는 메커니즘 • 결과 투플 집합에 대한 포인터 역할. • 커서의 처리 순서

  2. 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. 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 ] ] ]

  4. 3. Transact – SQL 고급(cont) • 커서의 종류 • 커서의 구현 방법에 따른 분류.

  5. 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 }

  6. 3. Transact – SQL 고급(cont) • 커서[Cursor] (cont) • FETCH의 옵션. • NEXT : 이 옵션은 FETCH를 이용하여 행을 검색하는데 사용되는 기본 옵션. 결과 집합에서 바로 다음 행을 검색. • ABSOLUTE : 이 옵션은 ABSOLUTE{n}의 형식으로 사용되는데 n의 양수인 경우 결과집합의 맨 처음부터 n번째에 있는 행을 반환한다. 반대로 n이 음수인 경우는 맨 뒤부터 n번째에 있는 행을 반환. • RELATIVE : 이 옵션은 ABSOLUTE와 마찬가지 형식을 취하며, n이 양수인 경우 현재행으로 부터 n번째 뒤로 있는 행을 반환하다. 반대로 n이 음수인 경우는 현재 위치로부터 n번째 앞에 있는 행을 반환.

  7. 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

More Related