CALL
CALL
저장 프로시저(stored procedure)를 호출하는 명령이에요.
출처: 문서
본문
관련 명령: CREATE PROCEDURE, SHOW PROCEDURES
구문 (Syntax)
CALL <procedure_name> ( [ [ <arg_name> => ] <arg> , ... ] )
[ INTO :<snowflake_scripting_variable> ]
필수 매개변수 (Required parameters)
procedure_name ( [ [ arg_name => ] arg , ... ] ) — 호출할 프로시저의 식별자(procedure_name)와 입력 인자를 지정해요. 입력 인자는 이름으로(arg_name => arg) 또는 위치로(arg) 지정할 수 있어요.
참고
- 모든 인자를 이름으로 또는 위치로 지정해야 해요. 일부 인자를 이름으로, 다른 인자를 위치로 지정할 수 없어요.
- 인자를 이름으로 지정할 때 인자 이름 주위에 큰따옴표를 사용할 수 없어요.
- 두 프로시저가 같은 이름이지만 인자 타입이 다르면, 인자 이름이 다를 경우 인자 이름으로 실행할 프로시저를 지정할 수 있어요. 자세한 내용은 프로시저 및 함수 오버로딩을 참고하세요.
선택 매개변수 (Optional parameters)
INTO :snowflake_scripting_variable — 지정된 Snowflake Scripting 변수를 저장 프로시저의 반환 값으로 설정해요.
예시 (Examples)
저장 프로시저 만들기 및 호출에 대한 더 자세한 예시는 저장 프로시저 작업을 참고하세요.
CALL stproc1(5.14::FLOAT);
저장 프로시저의 각 인자는 일반 표현식일 수 있어요.
CALL stproc1(2 * 5.14::FLOAT);
인자는 서브쿼리일 수 있어요.
CALL stproc1(SELECT COUNT(*) FROM stproc_test_table1);
호출(CALL) 문 하나당 저장 프로시저 하나만 호출할 수 있어요. 예를 들어 다음 문은 실패해요.
CALL proc1(1), proc2(2); -- Not allowed
또한 저장 프로시저 CALL을 표현식의 일부로 사용할 수 없어요. 예를 들어 다음 문은 모두 실패해요.
CALL proc1(1) + proc1(2); -- Not allowed
CALL proc1(1) + 1; -- Not allowed
CALL proc1(proc2(x)); -- Not allowed
SELECT * FROM (call proc1(1)); -- Not allowed
그러나 저장 프로시저 내부에서는 다른 저장 프로시저를 호출하거나 자기 자신을 재귀적으로 호출할 수 있어요.
주의: 중첩 호출은 허용되는 최대 스택 깊이를 초과할 수 있으므로, 특히 재귀를 사용할 때는 중첩 호출에 주의해야 해요.
다음 예시는 sv_proc1이라는 저장 프로시저를 호출하고 문자열 리터럴과 숫자를 입력 인자로 전달해요. 예시는 인자를 위치로 지정해요.
CALL sv_proc1('Manitoba', 127.4);
인자를 이름으로 지정할 수도 있어요.
CALL sv_proc1(province => 'Manitoba', amount => 127.4);
다음 예시는 세션 변수를 설정하고 저장 프로시저의 입력 인자로 전달하는 방법을 보여줘요.
SET Variable1 = 49;
CALL sv_proc2($Variable1);
다음은 Snowflake Scripting 변수에 저장 프로시저의 반환 값을 포착하는 Snowflake Scripting 블록 예시예요.
DECLARE
ret1 NUMBER;
BEGIN
CALL sv_proc1('Manitoba', 127.4) into :ret1;
RETURN ret1;
END;
참고: Snowflake CLI, SnowSQL, Classic Console 또는 Python Connector 코드의
execute_stream또는execute_string메서드를 사용한다면 이 예시를 대신 사용해요(Snowflake CLI, SnowSQL, Python Connector에서 Snowflake Scripting 사용 참고).
EXECUTE IMMEDIATE $$
DECLARE
ret1 NUMBER;
BEGIN
CALL sv_proc1('Manitoba', 127.4) into :ret1;
RETURN ret1;
END;
$$
;
더 알아보기 (Learn more)
- CREATE PROCEDURE — 저장 프로시저 만들기
- SHOW PROCEDURES — 저장 프로시저 나열
- 저장 프로시저 작업 — 예시와 사용법