22
클클클클클 SQL Server 2005 Express 10 클 SQL 클클클클클 1

10 장 SQL 프로그래밍 1

Embed Size (px)

DESCRIPTION

10 장 SQL 프로그래밍 1. 스크립트의 기초 개체를 생성하거나 또는 수정하려 할 때 사용된 일련의 문장 문장에 사용되는 각종 예약어 및 사용법 USE : 사용할 테이터베이스 선택 변수 : 변화할 수 있는 양을 나타내는 문자 , @ 으로 시작됨 DECLARE 선언문 이용 스칼라 변수 : 하나의 값을 갖는 변수 (int, char, varchar 등의 데이터 타입 사용 ) 테이블 변수 : 테이블 형식의 변수 커서 변수 text, ntext, image 데이터 형식은 변수로 사용할 수 없음 - PowerPoint PPT Presentation

Citation preview

Page 1: 10 장  SQL  프로그래밍 1

클릭하세요SQL Server 2005 Express

10 장 SQL 프로그래밍 1

Page 2: 10 장  SQL  프로그래밍 1

클릭하세요SQL Server 2005 SQL 프로그래밍 1

스크립트의 기초 개체를 생성하거나 또는 수정하려 할 때 사용된 일련의 문장 문장에 사용되는 각종 예약어 및 사용법

USE : 사용할 테이터베이스 선택

변수 : 변화할 수 있는 양을 나타내는 문자 , @ 으로 시작됨 DECLARE 선언문 이용 스칼라 변수 : 하나의 값을 갖는 변수 (int, char, varchar 등의 데이터 타입 사용 ) 테이블 변수 : 테이블 형식의 변수 커서 변수 text, ntext, image 데이터 형식은 변수로 사용할 수 없음 @@ 은 구성함수 ( 전역변수 ) 를 의미함

구성함수 ( 시스템 전역변수 ) 사용법 시스템 운영 상태를 보여주는 구성함수 (page 258 참고 ) SQL 문의 실행 상태를 보여주는 구성함수 (page 259 참고 )

USE 데이터베이스 DECLARE @ 변수명 데이터 형식 ;

DECLARE 커 서 변 수 명 CURSOR;

Page 3: 10 장  SQL  프로그래밍 1

클릭하세요SQL Server 2005 SQL 프로그래밍 1

운영상태 구성함수 @@dbts :

현재 데이터베이스의 마지막 timestamp 값을 반환

Page 4: 10 장  SQL  프로그래밍 1

클릭하세요SQL Server 2005 SQL 프로그래밍 1

실행상태 구성함수 @@rowcount : 영향 받은 행 수 반환 @@identity : identity 열을 가진 테이블에서 행을 추가한 후 마지막으로 입력된 identity 열의

값을 반환

행 수행 수

Page 5: 10 장  SQL  프로그래밍 1

클릭하세요SQL Server 2005 SQL 프로그래밍 1

실행상태 구성함수 @@nestlevel : 저장 프로시저 내에서 다른 저장 프로시저를 실행할 때 프로시저의 중첩

수를 반환

Execute 일 때= 중첩수 + 1

저장 프로시저 안에서 실행될 저장 프로시저 생성저장 프로시저 안에서 실행될 저장 프로시저 생성

기 생성한 프로시저를 포함하는저장 프로시저 생성기 생성한 프로시저를 포함하는저장 프로시저 생성

저장 프로시저 실행저장 프로시저 실행

Page 6: 10 장  SQL  프로그래밍 1

클릭하세요SQL Server 2005 SQL 프로그래밍 1

일괄처리 (batch) 일괄 처리란 ?

하나 이상의 쿼리를 한번에 실행하는 단위 ‘go’ 예약어로 분리되는 부분까지 , 그리고 ‘ go 3’ 은 3 번 반복 제약사항

Create default, create function, create procedure, create trigger, create view 문과 다른 SQL 문을 동일한 일괄처리에서 사용할 수 없음

Page 7: 10 장  SQL  프로그래밍 1

클릭하세요SQL Server 2005 SQL 프로그래밍 1

일괄처리 (batch) 일괄 처리와 트랜잭션을 사용하는 경우 쿼리 실행

XACT_ABORT 옵션 설정에 따라 실행에 영향을 받음 에러의 종류

문법에러 , 개체 참조 에러 , 런타임 에러 , 제약사항 에러 에러의 종류에 따라 실행의 결과가 다름

현재 트랜잭션의 rollback 여부 결정 XACT_ABORT 가 ON 으로 설정 : 런타임 에러 시 전체 트랜잭션이 종료된 후 rollback 됨 OFF 로 설정 : 에러를 발생시킨 쿼리만 rollback 됨

XACT_ABORT = OFF 일때

Page 8: 10 장  SQL  프로그래밍 1

클릭하세요SQL Server 2005 SQL 프로그래밍 1

일괄처리 (batch) 일괄 처리와 트랜잭션을 사용하는 경우 쿼리 실행

Page 9: 10 장  SQL  프로그래밍 1

클릭하세요SQL Server 2005 SQL 프로그래밍 1

쿼리 수행을 위한 도구 GUI : SQL Server Management Studio CMD : OSQL(ODBC 사용 ) , 그리고 SQLCMD(SQL Native Client 사용 )

일반쿼리 , 시스템저장 프로시저 , 스크립트 파일 실행 가능

ODBC 와 SQL Native Client 를 공급자라 함

Page 10: 10 장  SQL  프로그래밍 1

클릭하세요SQL Server 2005 SQL 프로그래밍 1

SQLCMD 의 사용

SQLCMD 로 SQL Server 에 접속하기

명령 설 명

GO 이전 GO 나 RESET 이후 모든 문장을 수행합니다 .

RESET 입력한 문장을 수행하지 않고 모두 취소합니다 .

ED 편집기를 부릅니다 .

!! 명령어 윈도우의 쉘 명령어를 수행하거나 스크립트를 수행합니다 .

QUIT SQLCMD 을 종료합니다 .

EXIT SQLCMD 을 종료합니다

CTRL + C SQLCMD 을 종료하지 않고 쿼리실행을 중지합니다 .

-트러스트 연결 : SQLCMD –E –S 서버이름 ( 윈도우 계정으로 연결 )-SQL 계정으로 연결 : SQLCMD –U 계정 – P 암호 – S 서버이름 (SQL 계정으로 연결 )

Page 11: 10 장  SQL  프로그래밍 1

클릭하세요SQL Server 2005 SQL 프로그래밍 1

흐름 제어 언어 일반쿼리 , 명령문 블록 , 저장프로시저의 실행흐름을 제어 종류

흐름제어 언어 설명

BEGIN .. END 여러 개의 쿼리를 실행할 수 있도록 일련의 쿼리를 묶음

GOTO 실행 흐름을 레이블로 변경함

IF ELSE 쿼리의 실행에 대한 조건을 설정함

RETURN 쿼리나 프로시저를 무조건 종료할 때 사용함 . 그리고 반환 값 지정 가능

WHILE SQL 문의 반복 실행에 대한 조건을 설정함

CONTINUE CONTINUE 다음에 나오는 문은 모두 무시하고 WHILE 문을 다시 시작함

BREAK BREAK 가장 안쪽의 WHILE 루프를 끝냄

WAITFOR 일괄처리 , 저장 프로시저의 실행을 시간 , 시간 간격으로 지정할 수 있음

Page 12: 10 장  SQL  프로그래밍 1

클릭하세요SQL Server 2005 SQL 프로그래밍 1

흐름 제어 언어 시작과 끝

분기 (goto)

If @@rowcount =0Begin select n’ -- if 조건식이 참인 경우 실행됨End;

While (@@rowcount = 0) Begin select n’ -- while 조건식이 참인 경우에 실행됨End

Begin ‘SQL’End

Declare @param1 as int;

Declare @param2 as char(1);

If((@param1 is null) and (@param2 is null)) goto Help;

Select * from Person.Contact;

Return;

Help: select n’ 사용법 : 첫번째 인수와 숫자 두번째 인수는 문자 한자리를 꼭 넣으세요’ ;

/* 레이블 정의 */Label :/* 실행 변경 */Goto Label;

Page 13: 10 장  SQL  프로그래밍 1

클릭하세요SQL Server 2005 SQL 프로그래밍 1

흐름 제어 언어 조건문

반환 (return) 호출한 곳으로 제어권을 넘겨주는 문 Return 문을 만나면 처리가 종료되고 그 이후의 문장은 수행되지 않음 저장 프로시저에서는 반환 시 호출자에게 int 형식의 데이터를 반환 할 수 있음

대기 (waitfor) 지정한 시각에 다음 문장을 실행하거나 일정시간 지연 후 다음 문장 실행

Declare @employeeID int;Set @employeeID = 1;If @rowcount is not null Begin select employeeID, National IDNumber from HumanResources.Employee Where EmployeeID = @employeeID EndElse begin select EmployeeID, NationalIDNumber from HumanResources.Employeeend

If( 조건식 ) Begin ‘SQL’ EndElse begin ‘SQL’end

Select n’ 실행문장’ ;Return;Select n’ 문장 실행안

됨’ ;go

Waitfor time ‘ 시각지정’ -- 하루에 지정된 시각까지 대기Waitfor delay ‘ 지연시간’ -- 지연시간만큼 실행 대기

Return 문 이후는 실행되지 않음

Waitfor delay ‘00:00:10’ ; 10 초간 대기

Page 14: 10 장  SQL  프로그래밍 1

클릭하세요SQL Server 2005 SQL 프로그래밍 1

흐름 제어 언어 반복문 (while)

WHILE ( 조건식 ) -- 조건식은 반드시 참 , 거짓값을 반환해야 함Begin ‘SQL 문’ break; ‘SQL 문’ continue;End;

Page 15: 10 장  SQL  프로그래밍 1

클릭하세요SQL Server 2005 SQL 프로그래밍 1

예외 처리 제어문 : 예외가 발생할 경우 처리되는 문장 TRY CATCH : try 블록과 catch 블록으로 구성됨

Try 블록으로 예외 상황 발생되는 sql 문 작성

Catch 블록에는 try 블록에서 발생된 예외를 처리할 sql 문 작성

Page 16: 10 장  SQL  프로그래밍 1

클릭하세요SQL Server 2005 SQL 프로그래밍 1

예외 처리 제어문 사용 시 고려사항 Try, catch 문은 항상 하나의 일괄처리 내에 존재해야 함 Try 블록과 catch 블록 사이에는 어떠한 sql 문도 와서는 안됨 중첩될 수 없음

Try Catch 문에서 에러 함수 사용 Catch 블록내에서 에러 정보를 얻을 때 사용됨 Catch 블록 내에서만 의미가 있음

Error_number() : 발생한 에러번호 Error_severity() : 에러 심각도 (1 ~ 25)

17 번 이후 심각도는 관리자 몫 Error_state() : 에러 상태 Error_procedure() : 에러가 발생된 프로시저 ,

또는 트리거 이름 반환 Error_line() : 에러가 발생한 줄 번호 Error_message() : 에러의 내용 반환

Zero divideZero divide

Page 17: 10 장  SQL  프로그래밍 1

클릭하세요SQL Server 2005 SQL 프로그래밍 1

예외 처리 제어문 Try catch 문으로 처리할 수 없는 에러

Try catch 문 내에서의 문법 에러 Try catch 문 내에서의 개체 참조 에러

Try catch 문에서 트랜잭션 사용 시 주의 사항 Commit 과 Rollback 사용

Try 블록에서 발생된 에러는 적절히 보충하고 commit 후 완료 수순 밟음 또는 try 블록에서 에러가 발생되기 전 상태로 되돌리는 rollback 수순 밟음 데이터 무결성을 위해 rollback 이 일반적인 작업 처리

Rollback transaction

Page 18: 10 장  SQL  프로그래밍 1

클릭하세요SQL Server 2005 SQL 프로그래밍 1

예외 처리 제어문 Try catch 문에서 트랜잭션 사용 시 주의 사항

XCAT_STATE() 함수의 리턴값에 따라… . Commit 가능 여부 결정 값이 1 이면 commit 가능 , 그렇지 않으면 불가

앞 예제의 수정 구문

Page 19: 10 장  SQL  프로그래밍 1

클릭하세요SQL Server 2005 SQL 프로그래밍 1

예외 처리 제어문 사용자 정의 메시지 추가 : SP_ADDMESSAGE

형식 (page 282 참고 )

기존 메시지 변경 : FORMATMESSAGE 형식

SP_ADDMESSAGE 에 의해 생성된 메시지에 대해서만 동작함 원하는 메시지 작성 함수 : RAISERROR

응용 프로그램으로 원하는 메시지 전달 형식

사용자 메시지 삭제 함수 : SP_DROPMESSAGE

SP_ADDMESSAGE 메 시 지 ID , 에 러 심 각 도 , 에 러 내 용 , 언 어 , WITH_LOG,'REPLACE'

FORMATMESSAGE ( 메시지 ID , 매개변수 ... )

RAISERROR( 메시지 ID, 심각도 , 호출상태 , 매개변수 ...) WITH 옵션

Page 20: 10 장  SQL  프로그래밍 1

클릭하세요SQL Server 2005 SQL 프로그래밍 1

기타 제어문 CASE : true 또는 false 가 아닌 조건에 따라 분기 EXECUTE(EXEC) : 저장 프로시저 실행 , 스칼라 함수 , 확장

프로시저 , 그리고 일괄처리내의 쿼리 실행 SET : 변수에 값을 할당 , 환경 변수 값 설정

조건 함수 : 조건에 따라 값을 반환하는 함수 NULLIF : 지정된 두 개의 표현식이 같으면 null, 같지 않으면 첫

번째 값을 반환 COALESCE 함수 : 해당 인수 중에서 null 이 아닌 첫 번째 값을

반환 , 전부 null 일 경우 에러 발생

Page 21: 10 장  SQL  프로그래밍 1

클릭하세요SQL Server 2005 SQL 프로그래밍 1

Example

Page 22: 10 장  SQL  프로그래밍 1

클릭하세요SQL Server 2005 SQL 프로그래밍 1

실습 – 제어문 작성하기 CASE 문을 사용한 열의 자동 형 변환

알아보기 CASE 사용시 문자형으로 자동 형 변환 ( 문자형 +

문자형 = 문자형 ) CASE 문 자동 형 변환 ( 문자형 + 숫자형 = 숫자형 )

SQLCMD 의 사용 SQLCMD 를 사용해서 쿼리 실행 후 실행결과를

파일로 저장하기