9. transact – sql 고급

Post on 10-Feb-2016

79 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

9. Transact – SQL 고급. 변수선언 (DECLARE) DBMS 가 가지고 있는 로컬변수를 선언할 때 쓰는 키워드 DECLARE 구문 DECLARE {{@local_variable data_type} | {@cursor_variable_name CURSOR} | {table_type_definition} }[,....n] < table_type_definition > ::= - PowerPoint PPT Presentation

TRANSCRIPT

1

9. Transact – SQL 고급 변수선언 (DECLARE)

DBMS 가 가지고 있는 로컬변수를 선언할 때 쓰는 키워드 DECLARE 구문

DECLARE {{@local_variable data_type}

| {@cursor_variable_name CURSOR} | {table_type_definition}

}[,....n] < table_type_definition > ::= TABLE({<coloume_definition> | < table_constranit >}[,...n]) < column_definition > ::= column_name scalar_data_type [ COLLATE collation_name ] [[ DEFAULT constant_expression ] | IDENTITY[ ( seed, increment)]] [ ROWGUIDCOL ] [ < column_constraint> ]

2

9. Transact – SQL 고급 (cont) 변수선언 (DECLARE) <cont>

DECLARE 구문 (cont) < column_constraint > ::= {[ NULL | NOT NULL ] |[ PRIMARY KEY | UNIQUE ] | CHECK ( logical_expression ) } < table_constraint > ::= {{ PRIMARY KEY | UNIQUE } ( column_name [,...n]) | CHECK ( serch_condition) } 일반적으로 DECLARE @local_variable 을 사용 로컬변수 정의시 ‘@’를 사용 , T-SQL 에서 ‘@’가 붙은 단어는 변수로 분류 . VARCHAR 타입의 CustomerName 변수를 길이 20 으로 선언하는 예

DECLARE @CustomerName varchar(20)

3

9. Transact – SQL 고급 (cont) 변수선언 (DECLARE) <cont>

예제 ( Northwind 데이터베이스 이용 ) 선언되 변수는 SET 또는 SELECT 를 이용하여 초기화 앞의 예 ‘ DECLARE @CustomerName varchar(20) ’는 다음과 같이 초기화

SET @CustomerName = ‘ByungJik Kim’SELECT @CustomerName = ‘ByungJik Kim’

myCount 라는 변수를 선언하고 Orders 테이블의 데이터의 개수를 세는 예 USE Northwind GO

DECLARE @myCount intSET @mycount = 0SELECT @mycount = count(*) FROM ordersSELECT @mycount

-- 결과----------- 830(1 row(s) affected)

4

9. Transact – SQL 고급 (cont) 변수선언 (DECLARE) <cont>

예제 (cont) 1998 년 5 월 5 일 Order 된 내용이 어떤 제품을 주문했는가를 찾아주는 예 . DECLARE @ordDate smalldatetime

SET @ordDate = '1998-05-05'SELECT orderID FROM OrdersWHERE OrderDate = @ordDate

5

9. Transact – SQL 고급 (cont) SET

현재 연결 세션의 특정정보를 처리하는 데 사용 .

SET 문으로 설정하는 SQL Server 의 시스템 정보 . 날짜 및 시간 데이터 처리에 대한 설정 잠금 (LOCK) 에 대한 정보 설정 SQL Server 2000 의 기타 기능에 대한 설정 쿼리 실행 및 처리에 대한 설정 SQL-92 기본 설정을 사용하도록 하는 설정 통계 정보 표시에 대한 설정 SQL Server 2000 트랜잭션 (Transaction) 처리에 대한 설정

6

9. Transact – SQL 고급 (cont) SET (cont)

SQL Server 2000 에서 SET 문과 함께 설정될 수 있는 옵션들 .

SET 옵션 설명

날짜 및 시간 설정 .DATEFIRST 일주일의 첫 번째 요일을 숫자로 설정 . 1 이 월요일 , 7 이 일요일이다 .

DATEFORMAT Datetime, smalldatetime 의 결과에 대한 날짜의 순서를 결정 .LOCK 과 관련되 구문

DEADLOCK_PRIORITY

교착상태 (Deadlock) 에 있을 때 , 세션의 반응방법을 설정

LOCK_TIMEOUT 하나의 세션에 잠금 (Lock) 이 발생했을 때 잠금이 해제될 때까지의 시간을 설정

기타

IDENTITY_INSERT 일반적으로 Identity 로 설정된 열에는 값을 삽입할 수 없다

LANGUAGE 세션에 대한 언어환경을 설정 . Datetime 등에 대한 날짜 형식에 영향을 미침 .

QUOTED_IDENTIFIER

SQL Server 를 리터럴과 식별자에 대해 SQL-92 표준을 따른다 .

7

9. Transact – SQL 고급 (cont) SET (cont)

쿼리 실행과 관련된 구문

NOCOUNT 쿼리 분석기에서 쿼리를 수행하면 , ‘몇 행이 적용됨’이라는 메시지가 나타남 .NOEXEC 컴파일만 되고 수행되지 않는다 .

PARSEONLY 구문은 컴파일 전에 Parse 를 먼저 수행 . 이 옵션이 ON 되면 Parse 만을 수행 .

ROWCOUNT 쿼리 분석기 등에서 쿼리를 수행할 때 적용받을 행의 수를 제한 .TEXTSIZE SELECT 수행 후 반환되는 text 또는 ntext 의 크기를 제한 .

SQL-92 설정과 관련된 구문

ANSI_NULL_DFLT_OFF

ANSI NULL 기본값 옵션을 OFF 로 설정 .

ANSI_NULL_DFLT_ON ANSI_NULL_DFLT_OFF 와 반대동작 .ANSI_NULLS 쿼리에서 SELECT 문을 수행할 때 , NULL 비교에 대해 설정 .

ANSI_PADDING 컬럼에 데이터를 저장할 때 , 컬럼 길이보다 짧은 값이 입력되면 후행 공백을 어떻게 처리할지 지정 .

ANSI_WARNINGS 발생할 수 있는 여러 가지 오류에 대하 SQL-92 표준에 따를지를 지정 .

8

9. Transact – SQL 고급 (cont) SET (cont)

통계와 관련되 구문

SHOWPLAN_ALL 쿼리가 어떤 수행계획에 따라 동작할 것인지를 보여주는 옵션

SHOWPLAN_TEXT 쿼리가 직접 수행되지 않고 , 어떨게 결과를 출력할 것인지에 대한 수행계획만 보임

STATISTICS IO 생성한 디스트 I/O 양에 대한 정보를 보임

STATISTICS TIME 각 Transact-SQL 문을 분석 , 컴파일하는 데 필요한 시간을 밀리 초 단위로 보임 .

트랜잭션과 관련된 구문

IMPLICIT_TRANSACTIONS

현재의 연결에 대해 암시적인 트래잭션 모드를 설정

TANSACTION ISOLATIONLEVEL

현재 연결에 대해 어떤 트랜잭션 격리 수준을 사용할 것인지를 지정 .

XACT_ABORT Transact-SQL 이 실행될 때 오류가 발생하면 트랜잭션을 자동으로 Rollback 할지 설정 .

9

9. Transact – SQL 고급 (cont) SET (cont)

SET 문으로 설정하는 SQL Server 의 시스템 정보 예제 .

USE northwindGOSELECT orderid, customerid, employeeid from orders

위 예제를 실행한 결과와 . SET ROWCOUNT 3

GOSELECT Orderid, customerid, employeeid from orders

SET 문으로 ROWCOUNT 를 제한한 쿼리의 결과 비교 . SET 문 사용 후 반드시 이전 상태로 되돌려 주는 것이 좋다 .

SET ROWCOUNT 0GO

10

9. Transact – SQL 고급 (cont) SET (cont)

IDENTITY 속성 테이블 정의시 특정 컬럼에 IDENTITY 속성을 부 , seed( 초기값 )

로부터 increment( 증분 ) 씩 증가 . 구문

IDENTITY[ (seed,increment ) ] 테이블 정의에서 idcol 은 seed 가 1 이고 매번 데이터가 insert 될

때마다 2 씩 증가하여 값이 채워지게 하는 예 USE test

GOCREATE TABLE idtest( idcol int IDENTITY(1,2), IDName varchar(20))insert idtest values(' 첫번째 ID')insert idtest values(' 두번째 ID')goSELECT * FROM idtest

11

9. Transact – SQL 고급 (cont) SET (cont)

IDENTITY 속성 결과

idcol IDName ----------- ----1 첫번째 ID3 두번째 ID

IDENTITY 속성의 열에는 명시적인 값을 사용하여 INSERT 할 수 없다 .

INSERT 나 UPDATE 를 IDENTITY 속성에 대해 명시적으로 표현하기 위해서는 SET 문을 사용하여 IDENTITY_INSERT 를 ON 시킨다 .

SET IDENTITY_INSERT ONGOINSERT idtest VALUES (2,' 테스트 ID')

12

9. Transact – SQL 고급 (cont) 일괄처리 (GO)

GO 키워드와 함께 쓰인 SQL 구문은 GO 키워드가 쓰인 곳까지 일괄 처리를 수행 .

예제 다음의 두 예를 비교 .

USE testGOCREATE TABLE batchtest1(

col1 int)insert batchtest1 VALUES(1) --validinsert batchtest1 VALUES(2,3) --invalidGOselect * from batchtest1

결과col1 ----------- (0 row(s) affected)

13

9. Transact – SQL 고급 (cont) 일괄처리 (cont)

예제 (cont) 위 예제에 이어 . 다음을 실행 .

insert batchtest1 values (1)goinsert batchtest1 values (2,3)go

결과 col1

----------- 1(1 row(s) affected)

첫 번째 예제는 두 개의 insert 문장을 일괄처리 , 두 번쨰 문장이 실패함으로 두 개의 insert 문장 모두 롤백 .

다음 예제는 하나의 문장씩 일괄처리 .

14

9. Transact – SQL 고급 (cont) 일괄처리 (cont)

일괄처리의 규칙 --northwind 데이터베이스로 바꾼다 .

USE northwindGO-- view 를 생성CREATE VIEW testviewASSELECT customerID, companyName, contactname FROM customersWHERE contacttitle = 'owner'--GO <- 잠시 주석처리 .--GO 키워드 없이 바로 View 를 select 한다 .SELECT * FROM testviewGO

결과 Server: Msg 156, Level 15, State 1, Procedure testview, Line 8Incorrect syntax near the keyword 'SELECT'.

15

9. Transact – SQL 고급 (cont) 일괄처리 (cont)

일괄처리의 규칙 (cont) 위 예제에서 중간의 GO 키워드가 없을때는 에러가 난다 . 위 예제로 돌아가 GO 키워드의 주석을 풀고 실행

결과customerID companyName contactname ---------- ---------------------------------------- ANATR Ana Trujillo Emparedados y helados Ana TrujilloANTON Antonio Moreno Taquería Antonio Moreno…..(17 row(s) affected)

16

9. Transact – SQL 고급 (cont) 일괄처리 (cont)

일괄처리의 규칙 (cont)1. 다음에 나열하는 몇 개의 CREATE 문은 일괄처리 부분이 될 수 없다 . 대상은

CREATE DEFAULT, CREATE PROCEDURE, CREATE RULE, CREATE TRIGGER 및 CREATE VIEW 문이며 , 이 문장과 다른 문장은 일괄처리로 묶일 수 없다 .

2. 동일한 일괄처리 내에서 테이블을 변경 (ALTER TABLE) 한 다음 새 열을 참조할 수 없다 .

3. 일과처리의 첫 문이 EXECUTE 문이면 EXECUTE 키워드는 필요 없다 . 저장 프로시져를 수행시킬 때 흔이 일어나며 , ‘EXEC SP_NAME’과 ‘ SP_NAME’은 똑같이 저장 프로시져를 실행

17

9. Transact – SQL 고급 (cont) 일괄처리 (cont)

일괄처리의 규칙 (cont) 변수의 선언은 일괄처리의 일부분이 될 수 없음을 보여주는 예

-- 경우 1DECLARE @myvar varchar(20)SET @myvar = 'rattc'SELECT CustomerID, CompanyName, ContactName FROM CustomersWHERE CustomerID = @myvarGO

-- 결과CustomerID CompanyName ContactName ---------- ---------------------------------------- RATTC Rattlesnake Canyon Grocery Paula Wilson(1 row(s) affected)

18

9. Transact – SQL 고급 (cont) 일괄처리 (cont)

일괄처리의 규칙 (cont) 변수의 선언은 일괄처리의 일부분이 될 수 없음을 보여주는 예 -- 경우 2

DECLARE @myvar varchar(20)GO SET @myvar = 'rattc'SELECT CustomerID, CompanyName, ContactName FROM CustomersWHERE CustomerID = @myvarGO-- 결과Server: Msg 137, Level 15, State 1, Line 2Must declare the variable '@myvar'.Server: Msg 137, Level 15, State 1, Line 3Must declare the variable '@myvar'.

19

9. Transact – SQL 고급 (cont) Transact-SQL 제어문

BEGIN – END 블록 BEGIN – END 블록내의 T-SQL 문은 일괄처리의 대상이 됨 . 예제 .

USE NorthwindGODECLARE @condition intDECLARE @cid varchar(20)SET @CID = ? -- 입력받는 값SELECT @condition=contacttitle FROM CustomersWHERE CustomerID = @cidIF @condition = 'sales representative'BEGIN UPDATE Orders SET Freight = Freight*0.9 WHERE CustomerID = @cidEND

20

9. Transact – SQL 고급 (cont) Transact-SQL 제어문 (cont)

IF 문 IF 문이 구문 정의

IF Boolean_expression { sql_statement | statement_block }[ ELSE{ sql_statement | statement_block } ]

SQL Server 에서 개체들이 이미 존재하는지의 여부를 알아보고 존재하면 DROP한 뒤 다시 생성하는 예제 .

IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA, TABLES WHERE TABLE_NAME = 'OurtestTable') DROP TABLE Ourtesttable GO CREATE TABLE Ourtesttable ( column_definition_list ... ) GO

21

9. Transact – SQL 고급 (cont) Transact-SQL 제어문 (cont)

IF 문 ( 계속 )

DECLARE @point INT, @credit NCHAR(1) SET @point = 77 IF @point >= 90

SET @credit = ‘A’ ELSE

IF @point >= 80SET @credit = ‘B’

ELSE IF @point >= 70 SET @credit = ‘C’ELSE SET @credit = ‘D’

PRINT ‘취득점수 ==> ‘ + CAST(@point AS NCHAR(3)) PRINT ‘학점 ==> ‘ + @credit

22

9. Transact – SQL 고급 (cont) Transact-SQL 제어문 (cont)

CASE-WHEN 문 어떤 조건의 경우를 따져 각기 다른 명령을 수행 CASE-WHEN 문의 구조

CASE input_expressionWHEN when_expression THEN result_expression […n][

ELSE else_result_expression]END

Bool 표현을 사용하는 구조 . CASE

WHEN Boolean_expression THEN result_expression […n][

ELSE else_result_expression]END

23

9. Transact – SQL 고급 (cont) Transact-SQL 제어문 (cont)

CASE 문

DECLARE @point INT, @credit NCHAR(1) SET @point = 77

SET @credit = CASE

WHEN (@point >= 90) THEN ‘A’WHEN (@point >= 90) THEN ‘B’WHEN (@point >= 90) THEN ‘C’WHEN (@point >= 90) THEN ‘D’ELSE ‘F’ END

PRINT ‘취득점수 ==> ‘ + CAST(@point AS NCHAR(3)) PRINT ‘학점 ==> ‘ + @credit

24

9. Transact – SQL 고급 (cont) Transact-SQL 제어문 (cont)

CASE-WHEN 문 (cont) Northwind 사의 사원들 급여를 직급에 맞게 조정하는 예 .

SELECT EmployeeID, Lastname + '' +Firstname empName,salaryupratio =CASE Title

WHEN 'S ales representative' THEN '20% UP'WHEN 'Vice Presidentm, sales' THEN '10%

DOWN'WHEN 'Sales manager' THEN '10% UP'ELSE 'not yet defined'

ENDFROM Employees

-- 결과EmployeeID empName salaryupratio ----------- ------------------------------ 1 DavolioNancy not yet defined2 FullerAndrew not yet defined…(9 row(s) affected)

25

9. Transact – SQL 고급 (cont) Transact-SQL 제어문 (cont)

CASE-WHEN 문 (cont) Northwind 사의 고객 중 얼마만큼의 액수를 구매했느냐에 따라 고객을

Normal, Special, Vip 로 구분하는데 사용되는 예 . SELECT o.customerid, contactname,sum(UnitPrice * quantity)

totalprice, 'customercategory' = case when sum(UnitPrice * quantity) < 5000 THEN

'Normal' when sum(UnitPrice * quantity) between 5001 and

50000 THEN 'Special' when sum(UnitPrice * quantity) > 50001 THEN

'VIP' end FROM Orders o join [order details] od on o.orderid = od.orderid left outer join customers c on o.customerid = c.customerid group by o.customerid, contactname

26

9. Transact – SQL 고급 (cont) Transact-SQL 제어문 (cont)

WHILE 문 T-SQL 의 루핑 (Looping) 을 위한 구문 WHILE 문의 구조

WHILE Boolean_expression{ sql_statement | statement_block }[break]{ sql_statement | statement_block }[CONTINUE]

테이블을 생성하고 100 건의 데이터를 insert 하는 예 -- 우선 test 데이터베이스에 Whiletest 라는 테이블을 만든다 .

USE testGOCREATE TABLE whiletest(testid int,testdate smalldatetime default getdate())GO

27

9. Transact – SQL 고급 (cont) Transact-SQL 제어문 (cont)

WHILE 문 (cont) 테이블을 생성하고 100 건의 데이터를 insert 하는 예 (cont)

--100 건의 데이터를 INSERT 한다 .DECLARE @increment intSET @increment = 1

WHILE (@increment <= 100)BEGIN

INSERT Whiletest VALUES(@increment, default) SET @increment = @increment + 1END

GO-- 데이터를 확인SELECT * FROM whiletestGO

28

9. Transact – SQL 고급 (cont) Transact-SQL 제어문 (cont)

WHILE 문 (cont) 1 부터 100 까지의 합을 구하는 프로그램

DECLARE @i INT DECLARE @hap INT

SET @i = 1 SET @hap = 0

WHILE (@i <= 100)BEGIN

SET @hap = @hap + @i SET @i = @i + 1END

PRINT @hap

29

9. Transact – SQL 고급 (cont) Transact-SQL 제어문 (cont)

GOTO 문

…. ….

SET @hap = @hap + @iIF (@hap > 1000) GOTO endprintSET @i = @i + 1

END

endprint: PRINT ‘합계 = ‘ + CAST(@hap AS NCHAR(10))

30

9. Transact – SQL 고급 (cont) Transact-SQL 제어문 (cont)

TRY, CATCH 문 오류를 처리는데 편리 . Visual C++, C# 에 있는 기능과 유사 구문 형식

BEGIN TRY 원래 사용하려는 SQL 문장들END TRYBEGIN CATCH

만약 BEGIN … TRY 에서 오류가 발생하면 처리할 일들END CATCH

USE sqlDBBEGIN TRYINSERT INTO userTbl VALUES(‘AJH’, ‘우주희’ , 1988, ‘서울’ , 170)PRINT N’정상적으로 입력되었다 .’END TRY

BEGIN CATCHPRINT N’오류가 발생했다 .’END CATCH

31

9. Transact – SQL 고급 (cont) Transact-SQL 제어문 (cont)

BREAK 문 , CONTINUE 문 RETURN 문

T-SQL 의 즉각 종료를 명령하는 구문 . RETURN 문에 상태코드를 함께 사용하는 경우의 예 .

USE northwindGOCREATE PROCEDURE GetStatusCode@customerID varchar(5)ASIF (SELECT contacttitle FROM customers WHERE customerid = @customerid) = 'owner' RETURN 1 --OWNER 이면 1 을 RETURNELSE RETURN 2 -- 아니면 2 를 RETURNGODECLARE @return_code intEXEC @return_code = getstatuscode 'anton'SELECT @return_code

32

9. Transact – SQL 고급 (cont) 커서 [Cursor]

테이블에서 여러 개의 행을 검색한 결과로 얻은 투플 집합을 한 투플씩 처리하기 위해 사용하는 메커니즘

결과 투플 집합에 대한 포인터 역할 . 커서의 처리 순서

커서의 선언 (DECLARE)

커서 열기 (OPEN)

커서에서 데이터 가져오기 (FETCH)

데이터 처리

커서 닫기 (CLOSE)

커서의 해제 (DEALLOCATE)

WHILE 문으로 모든 행이 처리될 때까지 반복

33

9. Transact – SQL 고급 (cont) 커서 사용의 예 : 고객의 평균 키를 계산

USE sqlDBGODECLARE userTbl_cursor CURSOR GLOBAL FOR SELECT height FROM userTbl;

OPEN userTbl_cursor; DECLARE @height INT

DECLARE @cnt INTDECLARE @totalHeight INTSET @totalHeight = 0SET @cnt = 0

FETCH NEXT FROM userTbl_cursor INTO @heightWHILE @@FETCH_STATUS = 0BEGINSET @cnt = @cnt + 1SET @totalHeight = @totalHeight + @heightFETCH NEXT FROM userTbl_cursor INTO @heightEND

CLOSE userTbl_cursor;DEALLOCATE userTbl_cursor;

34

9. 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 ]FOR select_statement[ FOR UPDATE [OF column_name [, . . . N ] ] ]

35

9. Transact – SQL 고급 (cont) 커서의 종류

커서의 구현 방법에 따른 분류 .

종류 설명

T-SQL 커서 Transact-SQL 을 사용하여 저장 프로시저 또는 단독으로 구현될 수 있는 , 우리가 흔히 커서라고 부르는 것 . DECLARE CURSOR 로 선언되고 사용

API 서버 커서 OLEDB 공급자에 의해 제공되는 , 서버측에서 운영되는 커서 .클라이언트 커서 ODBC 에 의해 제공되는 , 클라이언트 측에서 운영되는 커서 , 가장 속도가 느릴수

있다 .

종류 설명

전진 전용(Forward Only)커서

스크롤 할 수 없는 커서 , 결과집합에서 앞에서 뒤로 순차적인 행 검색만 지원 .빠른 전진 전용 커서 옵션 , DECLARE CURSOR 에서 FAST_FORWARD 옵션으로 설정 .

정적 (Static) 커서 커서가 OPEN 으로 열릴 때 , tempdb 에 결과집합을 저장 . 이 저장된 결과집합은 커서가 열려있는 동안에는 본래의 데이터베이스에 어떠한 변화가 가해져도 변경된 데이터를 적용하지 않는다 .

키집합 (Keyset) 커서

결과집합이 키집합이라고 하는 결과집합을 나타내는 고유 식별자에 의해서 구분 . 이 키집합의 경우 행을 고유하게 식별하는 고유 식별자 .

동적 (Dynamic) 커서

정적 커서와는 반대개념 . 커서가 OPEN 되어 있는 상태에서도 변경된 데이터를 바로 반영 . 다른 커서 정의에 비해서 로드 (LOAD) 가 늘어난다 .

36

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

37

9. Transact – SQL 고급 (cont) 커서 [Cursor] (cont)

FETCH 의 옵션 . NEXT : 이 옵션은 FETCH 를 이용하여 행을 검색하는데 사용되는 기본 옵션 .

결과 집합에서 바로 다음 행을 검색 . ABSOLUTE : 이 옵션은 ABSOLUTE{n} 의 형식으로 사용되는데 n 의 양수인

경우 결과집합의 맨 처음부터 n 번째에 있는 행을 반환한다 . 반대로 n 이 음수인 경우는 맨 뒤부터 n 번째에 있는 행을 반환 .

RELATIVE : 이 옵션은 ABSOLUTE 와 마찬가지 형식을 취하며 , n 이 양수인 경우 현재행으로 부터 n 번째 뒤로 있는 행을 반환하다 . 반대로 n 이 음수인 경우는 현재 위치로부터 n 번째 앞에 있는 행을 반환 .

38

9. Transact – SQL 고급 (cont) 커서 사용 예 :

Northwind 사에서 물건을 주문한 고객 중 합계가 5000 이상인 고객에게 좀더 빠른 Delivery 를 제공하기 위해 Shipping 을 DHL_Express 를 이용하도록 업데이트 하는 예 .

USE northWindGODECLARE @Orderid intDECLARE 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.orderidOPEN Use_DHL_Express_CursorFETCH NEXT FROM Use_DHL_Express_Cursor INTO @OrderidWHILE @@FETCH_STATUS = 0BEGINUPDATE OrdersSET shipVia = 4WHERE OrderID = @OrderIDFETCH NEXT FROM Use_DHL_Express_Cursor INTO @OrderIDEND

top related