'SQL'에 해당되는 글 1건

  1. 2008.05.06 Stored Procedure
2008. 5. 6. 22:15

Stored Procedure

1.
저장 프로시저
일반적으로 클라이언트 서버 환경의 데이터 베이스를 조작하는 경우, 클라이언트의 컴퓨터에서 입력된 SQL명령을 네트워크를 통해 데이터 베이스를 관리하고 있는 RDBMS 서버로 전송합니다. 그러나 데이터 베이스의 조작을 중심으로 하는 로직의 경우, 매번 클라이언트로부터 SQL 명령을 전송받지 않고도 복수의 SQL문 집합을 하나의 프로그램처럼 데이터베이스에 등록할 수 있습니다. 이렇게 함으로써 속도 개선과 편리성 향상이라는 두 가지 이득을 얻을 수 있는데 이러한 SQL 문들을 데이터베이스에 저장한 프로그램이라는 의미에서 저장 프로시저라고 부릅니다.

2.
저장 프로시저의 장점
1)
데이터베이스 내에서 SQL명령을 컴파일할 때 캐시를 이용할 수 있으므로 처리가 매우 빠르다.
2)
반복적으로 SQL명령을 실행하는 경우, 매회 명령마다 네트워크를 경유할 필요가 없으므로 속도가 빨라진다.
3)

어플리케이션 마다 복수의 SQL문을 기술할 필요없이 이미 만들어진 저장 프로시저를 반복 사용하여 다른 어플리케이션에서 재사용 할 수 있다.
4)


데이터베이스를 조작하는 로직을 수정하는 경우, 저장 프로시져는 서버측에 있으므로 어플리케이션을 수정하여 컴파일 할 필요가 없다.

3.

저장 프로시저의 기본적인 작성방법

형식) CREATE PROC [프로시저명]
AS
[SQL구문]


그러면 titles 테이블을 대상으로 price를 2배로 만드는 간단한 저장 프로시저를 작성해봅시다.

->
create proc pupdateprice
as
update titles
set price=price*2



<그림 1>

우선 pupdateprice라는 저장 프로시저를 실행하기 전에 먼저 기존의 titles 테이블의 price 데이터를 확인해봅시다.

->
select top 3 title, price from titles



<그림 2>

이제 pupdateprice 를 실행하고 그 결과를 살펴봅시다.

->
EXEC pupdateprice
select top 3 title, price from titles



<그림 3>

데이터를 살펴 보면 price가 모두 기존의 데이터의 2배가 되었음을 확인할 수 있습니다.

4.

인수를 가지는 저장 프로시저

형식)
create proc [프로시저명]
변수 선언부
as
[SQL구문]

위와 같이 Create Proc 구문 아래에 저장 프로시저에서 사용할 인수를 선언한다.

->
create proc pupdateprice2
@Mul float=2
as
update titles
set price=price*@Mul



<그림 4>

위에 보면 Mul변수앞에 @가 붙어있음을 볼 수 있습니다. @가 붙으면 변수라는 뜻입니다.

그럼 이제 인수값을 넣어서 pupdateprice2를 실행해 보겠습니다. 실행시에 인수값을 넣어주는 방법은 아래와 같습니다.

->
select top 3 title,price from titles
exec pupdateprice2 0.5
select top 3 title,price from titles



<그림 5>

위 그림에서 pupdateprice2가 실행되어서 titles 테이블의 price가 다시 절반으로 줄어든 모습을 볼 수 있습니다.

위와 같이 디폴트값을 사용하거나 혹은 인수를 순서대로 넘기지 않을 경우에는 아래의 예처럼 인수값을 일일이 지정해 주면 됩니다.

exec pupdateprice2 @I=2, @j=3

그러면 여러 개의 인수를 가진 프로시저를 직접 만들어 봅시다.

->
create proc pupdateprice3
@a int=2,
@b int,
@c int
as
update titles
set price=price*@a*@b/@c



<그림 6>

pupdateprice3 는 @a,@b,@c 세개의 인수를 가진 저장 프로시저입니다. @a에는 값을 지정하지 않았을 때 디폴트 값이 2를 갖도록 했습니다. 나머지 @b와 @c는 디폴트 값이 없으므로 꼭 인수값을 넣어야 합니다.

-> select top 3 title, price from titles
exec pupdateprice3 @b=2,@c=2
select top 3 title, price from titles



<그림 7>

저장 프로시저 확인 방법

형식)
sp_helptext [저장 프로시저]
-> sp_helptext pupdateprice



<그림 8>

[출처] 저장프로시져|작성자 아싸