wj안녕하세요 오늘은 PROCEDURE 실행 생성 or 실행시 필요한 변수에 대한 기본 값에 대해 알아보고자 합니다.
3달전엔가 회사에서 개발하던 도중 타 업체와 연동을 하는데 하나의 PROCEDURE를 통해 몇가지의 프로세스를
진행하는데 어떤 프로세스의 경우 두가지의 변수만 필요하고 어떤 프로세스의 경우 3가지의 변수가 필요하여
기본값에 대해 모르던 저는 어쩔 수 없이 PROCEDURE를 두개로 나누어 진행하게 되었습니다.
그러다가 이번에 다시 동일한 업체와 연동 건에 대해 개발할 일이 있어서 진행하던 중에 기본값에 대해 알게 되어서
이렇게 글로 남기고자 합니다.
CREATE PROC TEST_PROC
@ABC INT
,@BCD INT
, @CDE INT
AS
SELECT 1
RETURN
위와 같이 프로시져를 생성해 주고 실행문을 변수를 넣지 않고 실행할 경우
1. EXEC TEST_PROC
프로시저 또는 함수 'TEST_PROC'에 매개 변수 '@ABC'이(가) 필요하지만 제공되지 않았습니다.
2. EXEC TEST_PROC 1
프로시저 또는 함수 'TEST_PROC'에 매개 변수 '@BCD'이(가) 필요하지만 제공되지 않았습니다.
3. EXEC TEST_PROC 1, 1
프로시저 또는 함수 'TEST_PROC'에 매개 변수 '@CDE'이(가) 필요하지만 제공되지 않았습니다.
위와 같이 순서대로 오류가 발생하는 것을 확인 할 수 있습니다.
그래서 이러한 오류를 없애기 위해서 프로시져 내부에서 기본값을 설정할 수 있습니다. 기본값을 설정할 경우
그냥 변수에 값을 넣지 않고 실행을 시킬 경우 프로시져가 정상 작동 하는 것을 확인 할 수 있습니다.
@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로 조회가 됩니다.
하지만 여기서 주의 할 점은 변수의 직접 넣는 방법을 사용하고 순서에 맞게 데이터를 넣을 경우
매개 변수 번호 3과(와) 후속 매개 변수를 '@name = value'로 전달해야 합니다. '@name = value' 형식을 사용한 다음에는 모든 후속 매개 변수를 '@name = value' 형식으로 전달해야 합니다.
위와 같은 오류가 발생하게 됩니다.
만약 사용할 경우 순서에 맞게 데이터를 넣고 변수에 직접 넣는 부분은 그 이후에 넣으시길 바랍니다.
순서와 변수가 중복되면도 안되고요
중복 될 경우
메시지 8143, 수준 16, 상태 1, 프로시저 TEST_PROC, 줄 0 [배치 시작 줄 17]
매개 변수 '@ABC'이(가) 여러 번 제공되었습니다.
다음과 같은 오류가 발생합니다.
이상으로 프로시져의 기본 값에 대해 알아보았습니다.
따로 찾아도 잘 안나오고 해서 제가 직접 하면서 느낀 부분에 대해서 작성하고 예시를 만들어 보았습니다.
읽으신 모두에게 도움이 되셨기를 바라면서 행복한 하루 되시길 바랍니다.
'IT > MSSQL' 카테고리의 다른 글
[MSSQL]저장 프로시저에서 내용 찾기 (0) | 2022.05.02 |
---|---|
[MSSQL] ROUND를 이용한 소수점 올림 (0) | 2021.12.15 |
[MSSQL] LEN, REPLACE - PART 1 (0) | 2020.06.15 |
[MSSQL] DISTINCT 중복제거 (0) | 2020.06.06 |
[MSSQL] 조건문 (CASE WHEN, IF) + PRINT (0) | 2020.03.20 |