** SELECT로 가져온 결과들을 하나씩 읽어들여 처리하고 싶을때 사용한다
** 커서의 사용방법은 OPEN, FETCH, CLOSE, DEALLOCATE등 4단계를 거친다
** FETCH에는 NEXT, PRIOR, FIRST, LAST, ABSOLUTE {n / @nvar}, RELATIVE {n / @nvar}가 있다

   SET NOCOUNT ON      /* SQL문의 영향을 받은 행수를 나타내는 메시지를 숨긴다 */
   DECLARE cStatus SCROLL CURSOR    /* 앞뒤로 움직이는 커서 선언 */
   FOR
       SELECT ID, Year, City FROM aPlane
   FOR READ ONLY
   OPEN cStatus      /* 커서를 연다 */
   DECLARE @ID varchar(50), @Year int, @City varchar(50), @Status char(1)
   FETCH FROM cStatus INTO @ID, @Year, @City /* 커서에서 데이타를 하나씩 가져온다 */
   WHILE @@FETCH_STATUS=0                    /* 커서가 가르키는 결과의 끝까지 */
   BEGIN
       IF      @Year <= 5              SET @Status='A'
       ELSE IF @Year> 6 AND @Year <= 9 SET @Status='B'
       ELSE                            SET @Status='C'
       INSERT INTO aPlane(ID, City, Status) VALUES(@ID, @Year, @Status)
       FETCH FROM cStatus INTO @ID, @Year, @City /* 커서에서 데이타를 하나씩 가져온다 */
   END
   CLOSE cStaus                              /* 커서를 닫는다 */
   DEALLOCATE cStatus                        /* 커서를 해제한다 */

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

오브젝트 - Trigger(트리거)  (0) 2013.02.27
오브젝트 - Stored Procedure(저장 프로시저)  (0) 2013.02.27
오브젝트 - View(뷰)  (0) 2013.02.27
오브젝트 - Table (테이블)  (0) 2013.02.27
추가,업데이트,삭제  (0) 2013.02.26

** 한 테이블의 데이타가 편집(INSERT/UPDATE/DELETE)된 경우에 자동으로 다른 테이블의
   데이타를 삽입, 수정, 삭제한다
** 트리거 내용을 보고 싶으면 SP_HELPTRIGGER 트리거명 을 사용한다

CREATE TRIGGER 트리거명 ON 테이블명 FOR INSERT AS SQL문 /* INSERT 작업이 수행될때 */

CREATE TRIGGER 트리거명 ON 테이블명 AFTER UPDATE AS SQL문 /* UPDATE 작업이 수행되고 난 후 */

CREATE TRIGGER 트리거명 ON 테이블명 INSTEAD OF DELETE AS SQL문

DROP TRIGGER 트리거명

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

오브젝트 - Cursor(커서)  (0) 2013.02.27
오브젝트 - Stored Procedure(저장 프로시저)  (0) 2013.02.27
오브젝트 - View(뷰)  (0) 2013.02.27
오브젝트 - Table (테이블)  (0) 2013.02.27
추가,업데이트,삭제  (0) 2013.02.26

--3. S tor e d P r oc e du r e ( 저장 프로시저)--
** 데이타베이스내에서 SQL 명령을 컴파일할때 캐시를 이용할 수 있으므로 처리가 매우 빠르다
    반복적으로 SQL 명령을 실행할 경우 매회 명령마다 네트워크를 경유할 필요가 없다
    어플리케이션마다 새로 만들 필요없이 이미 만들어진 프로시저를 반복 사용한다
    데이타베이스 로직을 수정시 프로시저는 서버측에 있으므로 어플리케이션을 다시 컴파일할 필요가 없다
** 저장 프로시저의 소스 코드를 보고 싶으면 SP_HELPTEXT 프로시저명 을 사용한다

CREATE PROC 프로시저명 AS SQL문 /* 저장 프로시저 */

CREATE PROC 프로시저명 변수선언 AS SQL문 /* 인수를 가지는 저장 프로시저 */

CREATE PROC 프로시저명 WITH ENCRYPTION AS SQL문 /* 저장 프로시저 보안 설정 */

CREATE PROC 프로시저명 /* RETURN 값을 가지는 저장 프로시저 */

ex)-------------------------------------------
   인수1 데이타형, ... 인수2 데이타형 OUTPUT
 AS
   SQL문
   RETURN 리턴값
----------------------------------------------

DROP PROCEDURE 프로시저명1, 프로시저명2, ... /* 저장 프로시저 삭제 */

명령어
  BEGIN ... END /* 문장의 블록 지정 */
  
  DECLARE @변수명 데이타형 /* 변수 선언 */
  
  SET @변수명=값 /* 변수에 값 지정 */

  PRINT @변수명 /* 한개의 변수 출력 */

  SELECT @변수1, @변수2 /* 여러개의 변수 출력 */
  
ex)--------------------------------------------------
  IF 조건 /* 조건 수행 */
      수행1
  ELSE
      수행2
  WHILE 조건1 /* 반복 수행 */
      BEGIN
         IF 조건2
       BREAK - WHILE 루프를 빠져 나간다
       CONTINUE - 수행을 처리하지 않고 조건1로 되돌아간다
   수행
      END
------------------------------------------------------

EXEC 저장프로시저 /* SQL문을 실행 */

EXEC @(변수로 지정된 SQL문)

GO /* BATCH를 구분 지정 */


예제
--1. 기본 저장 프로시저--
CREATE PROC pUpdateSalary AS UPDATE Employee SET salary=salary*2

--2. 인수를 가지는 저장 프로시저--
CREATE PROC pUpdateSalary
    @mul float=2, @mul2 int
AS
    UPDATE Employee SET salary=salary* @M ul* @mul2
EXEC pUpdateSalary 0.5, 2 /* 모든 변수에 값을 대입 */
EXEC pUpdateSalary @mul2=2 /* 원하는 변수에만 값을 대입 */

--3. 리턴값을 가지는 저장 프로시저--
CREATE PROC pToday
    @Today varchar(4) OUTPUT
AS
    SELECT @Today=CONVERT(varchar(2), DATEPART(dd, GETDATE()))
    RETURN @Today
DECLARE @answ er varchar(4)
EXEC pToday @answ er OUTPUT
SELECT @answ er AS 오늘날짜

--4. 변수 선언과 대입, 출력--
** @는 사용자 변수이고 @@는 시스템에서 사용하는 변수이다
DECLARE @EmpNum int, @t_name VARCHAR(20)
SET @EmpNum=10
SET @t_name = '강우정'
SELECT @EmpNum

         이런식으로 다중입력도 가능함.
SELECT @no = no, @name = name, @level = level
FROM OF_M ember
WHERE userId ='"

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

오브젝트 - Cursor(커서)  (0) 2013.02.27
오브젝트 - Trigger(트리거)  (0) 2013.02.27
오브젝트 - View(뷰)  (0) 2013.02.27
오브젝트 - Table (테이블)  (0) 2013.02.27
추가,업데이트,삭제  (0) 2013.02.26

+ Recent posts