안규 공부방

MS-SQL > 저장 프로시져 변수 선언

등록일 : 2017-07-03 19:25 조회수 : 92,907

안녕하세요... 안규입니다.
^_^;
 
건강하시죠? 전 요즘 JAVA 라는 넘을 공부하니라,, 정신이 하나두 없떠여,,, -_-
제가 옛날에 저장프로시져라는 넘에 대해서 자세히 여기에 정리해 올릴려구 했는데,,,,
제가 너무 게을러서 이제야 올리게 됐네요..... ^^;;
 
오늘 제가 적게될 기본문법은 프로시져 뿐 아니라 SQL 문에서 사용해도 되는것들이랍니다.
그리 어려운것이 없으니까,, 정리 한다라구 생각하시구,, 부담없이 읽어 주세엽....
 
  7.4.1  변수선언(일반 변수)
                 
          declare @변수명 자료형
 
          언어를 조금이라도 다루어 보신 경험이 있으시면 어렵지 않게 이해 하실겁니다.
          변수이름은 항상 @하나가 붙어야 한답니다. 만약 @@ 이케 두개가 붙어있다면 이건 시스템
          에서 사용되는 변수입니다. 사용자가 선언하거나 값을 넣을수 없는 변수이지요.
         
          declare @변수명 자료형, @변수명 자료형, @변수명 자료형
         
          여러개 선언하실경우 위와 같이 ','로 구분 지어주면 됩니다.
         
          set @변수명=값
         
          다음으로 SET 명령은 값을 초기화 하거나 값을 변수에 저장할수 있습니다.
         
          SELECT @변수명
         
          변수의 값을 가지고 올경우는 SELECT 명령을 사용하면 됩니다.
 
          예를 들어서 TEST테이블에 있는 필드의 값을 가지고 와서 변수에 저장하는 예를 보도록
         
          하겠습니다.
         

	          USE TEST
	          DECLARE @ID VARCHAR(10), @PASSWD VARCHAR(2)
	          SELECT @ID=ID , @PASSWD=PWD FROM TEST WHERE NAME='최안규'
	          SELECT @ID,@PASSWD

         
          위의 예제를 쿼리 분석기에서 테스트해 보시길 바랍니다.
          문장을 간단히 설명드리자면,,,USE 명령은 테이타 데이스를 사용하겠다란 뜻입니다.
          그리구,,, DECLARE  명령은 아까 배웠지요?
         
          그리구,,, 이름이 '최안규'인 사람을 가지고 와서 @ID, @PASSWD에 각각 넣구요..
          그리구,,, SELECT 명령으로 가지고 와서 출력을 시켜 줄수 있습니다.
         
          ^^;;
          쉽지요?
         
          만약 문자를 출력하고 싶으면 어케 하면 될까여??
         
          PRINT 'CHOI AN KYU'
         
          PRINT 명령을 사용하면 됩니다. PRINT 명령은 문자 형밖에 출력할 수 없답니다.
         
  7.4.2  변수선언(시스템  변수)
 
          @@ERROR
         
          SQL문이 실행하다가 오류를 만났을때,,, 이 변수에 오류번호가 리턴된답니다.
          오류가 없다면 0이 리턴되겠지요?
         
          아래의 예제를 보도록 하겠습니다.
         
 

	          DECLARE @NAME CHAR(10),@TEL CHAR(15),@EMAIL CHAR(50)
	          SET @NAME='최안규'
	          SET @TEL='011-9619-8280'
	          SET @EMAIL='CAK0280@SKYLLA.CO.KR'
	
	           Insert Into MEMBER (name,tel,email) values (@Name,@Tel,@Email)
	
	           If ( @@error<>0 ) 
	              BEGIN
	                PRINT "ERROR"
	              END
	           else
	              BEGIN
	                PRINT "ok"
	              END  


         
          위의 소스를 보면,,, @NAME,@TEL,@EMAIL 를 선언하고 값을 넣었습니다.
          그리구, INSERT를 통해 값을 집어 넣었습니다.
          이때 만약 에러가 난다면 아래 @@ERROR 변수에는 1이상의 값이 들어 가겠지요? 에러가
         
          없다면,, 0 이 들어 갑니다. 
         
          에러가 없으면 OK를 에러가 나면 ERROR 을 출력하게 됩니다.
          이것도 쉽지요?
          ^_^;
        
          전 이렇게 쉬운거만 한답니다... 호호호
        
          @@identity
        
          이 변수는 해당 세션에서 마지막에 입력한 identity 값을 리턴해 줍니다.
          위의 소스에서 'SELECT @@identity ' 라고 입력하구 실행 시켜 보세요...
        
          여러분은 아마 no 나 number 같은 필드를 만들구,identity 속성을 (1,1) 로 주시지요?
          이변수는 이 필드의 값을 말하는 겁니다.
          만약 identity 가 없다면,,, 'null' 값이 리턴되는걸 볼수 있을 겁니다.
          '백문이 불여일타'라 했던가여??
         
          직접 확인해 보시길 바랍니다.
          알고 보면 이렇게 쉬운것을??????????????????????????????? 그쳐????
         
          @@trancount
         
          여러분은 트랜젝션 처리를 자주 쓰시나엽?
          호호,,
         
          이변수도 벌써 느겼겠지만,,, 트랜잭션의 중첩된 상태를 가지고 있는 변수입니다.
          트랜잭션 밖에 있으면 0, 트랜젝션이 진행중이면,,, 1 이란 값을 가지고 있답니다.
         
         
DECLARE @NAME CHAR(10),@TEL CHAR(15),@EMAIL CHAR(50)
	          SET @NAME='최안규'
	          SET @TEL='011-9619-8280'
	          SET @EMAIL='CAK0280@SKYLLA.CO.KR'
	
	          Begin tran
	          Insert Into MEMBER (name,tel,email) values (@Name,@Tel,@Email)
	          select @@trancount
	          If ( @@error<>0 ) 
	             BEGIN
	                ROLLBACK TRAN
	                PRINT "ERROR"
	             END
	          else
	             BEGIN
	               COMMIT TRAN
	               PRINT "ok"
	             END  
	           select @@trancount   



         
           조금 길어 졌지만,, 겁내지 마십시오....... ^^;; 별건 없답니다.
           위에서는 트랜젝션 처리를 해 봤습니다.
          
           트랜젝션에 대해서는 이미 알고 계시리라 믿지만,,그래두 돌다리두 두들겨 보고 건너라,
          
           란 말두 있지여? 트랜젝션 시작은 ?
               BEGIN TRAN
           트랜젝션이 시작하기 전까지의 값으로 되돌리고 싶을때는?
               ROLLBACK TRAN          
           트랜젝션이  시작된 곳에서 부터 값을 디비에 저장하고 싶다면?
               COMMIT TRAN
          
           위에서는 SELECT @@TRANCOUNT 명령을 통해 출력했지요?
          
           아마 에러가 없다면,,,, 여러분의 PC에서는 아래와 같은 결과가 출력되겠군요.
          
           1
           --------------------------------
           OK
           --------------------------------  
           0
          
           이렇게 나온가여?? 1은 현재 트랜젝션 안에 있다는 거구..OK는 처리가 잘됐다는거구요
          
           0은 트랜젝션을 빠져 나왔다는 거지요....
          
           @@ROWCOUNT
           이 변수는 수행된 SQL문에 의해서 영향받은 행의 수를 나타내는 값이 들어 갑니다.
                      
          

	          DECLARE @NAME CHAR(10),@TEL CHAR(15),@EMAIL CHAR(50)
	          SET @NAME='최안규'
	          SET @TEL='011-9619-8280'
	          SET @EMAIL='CAK0280@SKYLLA.CO.KR'
	
	           Insert Into MEMBER (name,tel,email) values (@Name,@Tel,@Email)
	           SELECT @@ROWCOUNT
	
	           If ( @@error<>0 ) 
	              BEGIN
	                PRINT "ERROR"
	              END
	           else
	              BEGIN
	                PRINT "ok"
	              END  


                                
                      
           이렇게 실행시키는 1이라는 값이 출력 되겠지요???

           간단하게 알라 볼려구 했는뎅,,,,  내용이 알맹이 없이 길어 지기만 했군요..
           오늘은 정말 화창한  주말 이군요....

           화창한 주말에,,,,,,
           여행이라두 한번 다녀오고 싶은데,,, 차비가 없어서 가지 못하는 제 자신이 초라해
           지는군요..
           흐흐흑,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
          
           건강하세요...
          
           다음에는,,,, 음,,,, 제어문법에 대해서,, 간단해 알아볼까 합니다.....
 
※ 혹시 도움이 되셨다면 댓글에 한마디 남겨주세요!
작성자   비밀번호
자동글 방지     (자동글 방지 기능입니다.)
내용   댓글달기 
이메일 문의 : cak0280@nate.com  
Copyright 2000 By ENTERSOFT.KR All Rights Reserved.