SQL programming 
저장 프로시져 (Stored Procedure)

항상 단일 SQL문장으로 모든 쿼리나 데이타 갱신을 수행하면 좋겠지만, 어떤 경우는 여러 SQL문장을 수행하여 복잡한 로직을 구성할 필요가 있다. 이렇게 여러 SQL문장들을 SQL서버에서 한 단위로 저장해서 편리하게 호출할 수 있게 만든 것이 저장 프로시져(Stored Proceudre 혹은 간단히 SP라 부른다)이다. Stored Procedure는 그 안에 복잡한 비지니스 로직을 넣을 수도 있고, 복잡한 데이타 처리를 수행할 수 있다.





Stored Procedure 생성

Stored Procedure를 만들기 위해서는 CREATE PROCEDURE (혹은 줄여서 CREATE PROC) 문을 사용한다. 기본적으로 CREATE PROC 뒤에 프로시져명을 써주고, AS 뒤에 저장할 SQL문장들을 적어준다. 다음은 간단하게 SELECT 한 문장으로 된 SimpleSP이라는 SP를 만든 예이다.





파라미터가 있는 SP 생성

Stored Procedure는 저장 프로시져 안에서 사용할 입력 파라미터를 받아들일 수 있고, 또한 출력 파라미터도 사용할 수 있다. 파라미터는 아래 예에서 보듯이 프로시져명과 AS 절 사이에 콤마로 구분하여 넣는데, @로 시작되는 파라미터명과 파라미터 타입을 적는다. 특히, 출력 파라미터 인 경우는 OUTPUT 키워드를 뒤에 붙인다. 출력 파라미터가 있는 경우, 프로시져 내에서 출력 파라미터에 값을 할당해 준다.

예제





Stored Procedure 실행

Stored Procedure 실행하기 위해서는 EXECUTE (줄여서 EXEC)문이나 sp_executesql을 사용한다. Stored Procedure가 만약 문장의 처음에 나올 경우는 EXEC 혹은 sp_executesql를 생략하고 SP명만으로 직접 실행할 수 있다. 파라미터가 있는 경우는 파라미터를 순서대로 적어주거나 Named Parameter로 [파리미터명=파라미터값]의 형식으로 적어준다. 아래는 위의 SP를 EXEC를 써서 실행하는 예이다. sp_executesql은 EXECUTE보다 보안이나 성능면에서 더 향상된 기능을 제공한다. 특히 문자열 파라미터가 있는 경우, EXEC는 SQL Injection 문제를 야기할 수 있는데, 이때 sp_executesql를 사용하여 Parameterized Query를 실행, SQL Injection문제를 해결할 수 있다. (주: SQL Injection에 대한 내용은 링크 (SQL Injection (3) - Stored Procedure에서의 SQL Injection) 를 참조)

예제





본 웹사이트는 광고를 포함하고 있습니다. 광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.