CREATE PROC usp_error
 @userid nvarchar(10),
 @name nvarchar(10),
 @birthYear INT = 1900,
 @addr NCHAR(4) = '서울',
 @mobile1 NCHAR(3) = NULL,
 @mobile2 NCHAR(8) = NULL,
 @height smallInt = 180

AS
 DECLARE @err INT;
 INSERT INTO userTbl(userID,name,birthYear,addr,mobile1,mobile2,height)
   VALUES (@userid,@name,@birthYear,@addr,@mobile1,@mobile2,@height);

 SELECT @err = @@ERROR;
 IF @err != 0
 BEGIN
  PRINT  '###' + @name + '을(를) INSERT에실패했습니다. ###'
 END;

 RETURN @err; -- 오류번호를 돌려줌.

------------------------------------------------------------
TRY...CATCH문 이용으로 변경
==>

CREATE PROC usp_tryCatch
 @userid nvarchar(10),
 @name nvarchar(10),
 @birthYear INT = 1900,
 @addr NCHAR(4) = '서울',
 @mobile1 NCHAR(3) = NULL,
 @mobile2 NCHAR(8) = NULL,
 @height smallInt = 180
AS
 DECLARE @err INT;
 BEGIN TRY
   INSERT INTO
userTbl(userID,name,birthYear,addr,mobile1,mobile2,height)
   VALUES (@userid, @name, @birthYear, @addr, @mobile1,
@mobile2, @height)
 END TRY
 
 BEGIN CATCH
  SELECT ERROR_NUMBER()
  SELECT ERROR_MESSAGE()
 END CATCH

'DBMS > T-SQL' 카테고리의 다른 글

날짜,시간함수  (0) 2009.06.21
SQL server 2005 오류상태파악 함수  (0) 2009.06.21
저장프로시져 WHILE문 예  (0) 2009.06.21
저장프로시져 CASE문 예  (0) 2009.06.21
저장프로시져 IF .. ELSE 사용예  (0) 2009.06.21
USE sqlDB;
GO
         ALTER TABLE userTbl  ADD  grade NVARCHAR(5);  -- 고객등급 열 추가

 

GO
CREATE PROCEDURE usp_while
AS
           DECLARE userCur CURSOR FOR-- 커서 선언
           SELECT U.userid,sum(price*amount)
              FROM buyTbl B
                       RIGHT OUTER JOIN userTbl U
                       ON B.userid = U.userid
            GROUP BY U.userid, U.name

            OPEN userCur  -- 커서열기

            DECLARE @id NVARCHAR(10) -- 사용자아이디를 저장할 변수
            DECLARE @sum BIGINT -- 총구매액을 저장할 변수
            DECLARE @userGrade NCHAR(5) -- 고객 등급 변수

            FETCH NEXT FROM userCur INTO @id, @sum -- 첫행 값을 대입

            WHILE (@@FETCH_STATUS=0) -- 행이 없을 때까지 반복(즉, 모든 행 처리)
            BEGIN
              SET @userGrade =
                CASE 
                     WHEN (@sum >= 1500) THEN N'최우수고객'
                     WHEN (@sum  >= 1000) THEN N'우수고객'
                     WHEN (@sum >= 1 ) THEN N'일반고객'
                     ELSE N'유령고객'
                END
  
                UPDATE userTbl SET grade = @userGrade WHERE userID = @id
     
                 FETCH NEXT FROM userCur INTO @id, @sum -- 다음행 값을 대입
            END

            CLOSE userCur  -- 커서 닫기
            DEALLOCATE userCur -- 커서 해제

CREATE PROC usp_case
     @userName nvarchar(10)
AS
 DECLARE @bYear INT
 DECLARE @tti NCHAR(3) -- 띠
 SELECT @bYear = birthYear FROM userTbl
  WHERE name = @userName;

 SET @tti =

 CASE
   WHEN ( @bYear%12 =  0) THEN '원숭이'
   WHEN ( @bYear%12 =  1) THEN '닭'
   WHEN ( @bYear%12 =  2) THEN '개'
   WHEN ( @bYear%12 =  3) THEN '돼지'
   WHEN ( @bYear%12 =  4) THEN '쥐'
   WHEN ( @bYear%12 =  5) THEN '소'
   WHEN ( @bYear%12 =  6) THEN '호랑이'
   WHEN ( @bYear%12 =  7) THEN '토끼'
   WHEN ( @bYear%12 =  8) THEN '용'
   WHEN ( @bYear%12 =  9) THEN '뱀'
   WHEN ( @bYear%12 =  10) THEN '말'
   ELSE '양'
  END;

 

PRINT @userName + '의 띠==> ' + @tti;

CREATE PROCEDURE   USP_IFELSE
      @userName  NVARCHAR(10)
AS
        DECLARE @bYear   INT
        SELECT @bYear = birthyear FROM USETBL
          WHERE NAME = @useName;

 

        IF ( @bYear >= 1980 )
            BEGIN
                   //..............
            END
        ELSE
            BEGIN
                   //...................
            END

예)  1개

use sqlDB;
GO
CREATE PROCEDURE USP_USER1
@userName NVARCHAR(10)
AS
 SELECT * FROM USERTBL WHERE NAME = @userName ;

실행)

exec usp_users1 'ㅌㅌㅌㅌ';

 

 

예) 2개

CREATE PROCEDURE USP_USER2
@userBirth      INT,
@userHeight    INT
AS
 SELECT * FROM USERTBL 
  WHERE birthYear > @userBirth AND height > @userHeight;

실행)

EXEC USP_USER2 1980, 180;

 

 

예) 출력매개변수 사용시

CREATE PROCEDURE USP_USER4

@txtValue        NCHAR(10),
@outValue       INT OUTPUT
AS
INSERT INTO TESTTBL VALUES ( @txtValue );
SELECT @outValue = IDENT_CURRENT('testTbl');
-- 테이블의 identity값

'DBMS > T-SQL' 카테고리의 다른 글

SQL server 2005 오류상태파악 함수  (0) 2009.06.21
저장프로시져 @@ERROR함수 사용 예  (0) 2009.06.21
저장프로시져 WHILE문 예  (0) 2009.06.21
저장프로시져 CASE문 예  (0) 2009.06.21
저장프로시져 IF .. ELSE 사용예  (0) 2009.06.21

+ Recent posts