IT/MSSQL

[MSSQL] PROCEDURE 기본값 설정

유자애플 2021. 7. 14. 15:13
반응형

wj안녕하세요 오늘은 PROCEDURE 실행 생성 or 실행시 필요한 변수에 대한 기본 값에 대해 알아보고자 합니다.

 

3달전엔가 회사에서 개발하던 도중 타 업체와 연동을 하는데 하나의 PROCEDURE를 통해 몇가지의 프로세스를

 

진행하는데 어떤 프로세스의 경우 두가지의 변수만 필요하고 어떤 프로세스의 경우 3가지의 변수가 필요하여

 

기본값에 대해 모르던 저는 어쩔 수 없이 PROCEDURE를 두개로 나누어 진행하게 되었습니다. 

 

그러다가 이번에 다시 동일한 업체와 연동 건에 대해 개발할 일이 있어서 진행하던 중에 기본값에 대해 알게 되어서 

 

이렇게 글로 남기고자 합니다.

 

 

CREATE PROC TEST_PROC
 @ABC INT
 ,@BCD INT
, @CDE INT
 AS

  SELECT
 RETURN

 

 

위와 같이 프로시져를 생성해 주고 실행문을 변수를 넣지 않고 실행할 경우 

 

 1. EXEC TEST_PROC  

메시지 201, 수준 16, 상태 4, 프로시저 TEST_PROC, 줄 0 [배치 시작 줄 15]
프로시저 또는 함수 'TEST_PROC'에 매개 변수 '@ABC'이(가) 필요하지만 제공되지 않았습니다.

 2. EXEC TEST_PROC  1

메시지 201, 수준 16, 상태 4, 프로시저 TEST_PROC, 줄 0 [배치 시작 줄 15]
프로시저 또는 함수 'TEST_PROC'에 매개 변수 '@BCD'이(가) 필요하지만 제공되지 않았습니다.

3. EXEC TEST_PROC  1, 1

메시지 201, 수준 16, 상태 4, 프로시저 TEST_PROC, 줄 0 [배치 시작 줄 15]
프로시저 또는 함수 'TEST_PROC'에 매개 변수 '@CDE'이(가) 필요하지만 제공되지 않았습니다.

위와 같이 순서대로 오류가 발생하는 것을 확인 할 수 있습니다.

그래서 이러한 오류를 없애기 위해서 프로시져 내부에서 기본값을 설정할 수 있습니다. 기본값을 설정할 경우 

그냥 변수에 값을 넣지 않고 실행을 시킬 경우 프로시져가 정상 작동 하는 것을 확인 할 수 있습니다. 

CREATE PROC TEST_PROC
 @ABC INT = 1
 ,@BCD INT = 1
, @CDE INT = 1
 AS

  SELECT  @ABC, @BCD, @CDE 
 RETURN  

 EXEC TEST_PROC   --실행문

위의 실행문을 구동하면 각각 1, 1, 1 이 조회가 되는 것을 확인 할 수 있습니다. 

 

이 실행문에서 각각의 변수에 3, 4, 5 이렇게 넣어줄 경우 

 

 EXEC TEST_PROC 3, 4, 5   --실행문

 

각각 3, 4, 5이 조회 되는 것을 확인 할 수 있습니다. 

 

말 그대로 변수에 들어오는 값이 있다면 들어온 값을 보여주고 없다면 기본 값을 적용해서 보여주는 방법입니다. 

 

그런데 여기서 프로시져 실행 중에 @ABC는 필요 없고 @BCD와 @CDE만 필요할 경우 

 

그렇다면 다음과 같이 실행문을 실행해 주시면 됩니다.

 

 EXEC TEST_PROC @BCD = 4, @CDE = 5   --실행문

 

이렇게 실행해 주시면 조회 되는 것은 1, 4, 5 이렇게 @ABC는 기본 값으로 @BCD는 변수에 들어온 4로

 

@CDE는 동일하게 5로 조회가 됩니다. 

 

하지만 여기서 주의 할 점은 변수의 직접 넣는 방법을 사용하고 순서에 맞게 데이터를 넣을 경우 

  EXEC TEST_PROC  @DCF = 3 ,@ABC = 2 , 2
메시지 119, 수준 15, 상태 1, 줄 18
매개 변수 번호 3과(와) 후속 매개 변수를 '@name = value'로 전달해야 합니다. '@name = value' 형식을 사용한 다음에는 모든 후속 매개 변수를 '@name = value' 형식으로 전달해야 합니다.

위와 같은 오류가 발생하게 됩니다. 

 

만약 사용할 경우 순서에 맞게 데이터를 넣고 변수에 직접 넣는 부분은 그 이후에 넣으시길 바랍니다.

 

순서와 변수가 중복되면도 안되고요 

 

중복 될 경우 

메시지 8143, 수준 16, 상태 1, 프로시저 TEST_PROC, 줄 0 [배치 시작 줄 17]
매개 변수 '@ABC'이(가) 여러 번 제공되었습니다.

 

다음과 같은 오류가 발생합니다.

 

이상으로 프로시져의 기본 값에 대해 알아보았습니다.

 

따로 찾아도 잘 안나오고 해서 제가 직접 하면서 느낀 부분에 대해서 작성하고 예시를 만들어 보았습니다.

 

읽으신 모두에게 도움이 되셨기를 바라면서 행복한 하루 되시길 바랍니다.

반응형