CALL¶
저장 프로시저 를 호출합니다.
- 참고 항목:
구문¶
CALL <procedure_name> ( [ [ <arg_name> => ] <arg> , ... ] )
[ INTO :<snowflake_scripting_variable> ]
필수 매개 변수¶
procedure_name ( [ [ arg_name => ] arg , ... ] )
호출할 프로시저의 식별자(
procedure_name
) 및 입력 인자를 지정합니다.이름(
arg_name => arg
) 또는 위치(arg
)로 입력 인자를 지정할 수 있습니다.다음 사항을 참고하십시오.
이름 또는 위치로 모든 인자를 지정해야 합니다. 일부 인자는 이름으로, 다른 인자는 위치로 지정할 수는 없습니다.
이름으로 인자를 지정할 때 인자 이름 주위에 큰따옴표를 사용할 수 없습니다.
두 함수 또는 두 프로시저가 이름은 같지만 인자 유형이 다른 경우 인자 이름이 다르면 인자 이름을 사용하여 실행할 함수 또는 프로시저를 지정할 수 있습니다. 프로시저 및 함수 오버로딩하기 섹션을 참조하십시오.
선택적 매개 변수¶
INTO :snowflake_scripting_variable
지정된 Snowflake Scripting 변수 를 저장 프로시저의 반환 값으로 설정합니다.
예¶
저장 프로시저 생성 및 호출에 대한 보다 다양한 예는 저장 프로시저 관련 작업하기 을 참조하십시오.
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;
참고: Python Connector 코드에서 Snowflake CLI, SnowSQL, Classic Console, 또는 execute_stream
또는 execute_string
메서드를 사용하는 경우 이 예제를 대신 사용하십시오(Snowflake CLI, SnowSQL, Classic Console 및 Python Connector에서 Snowflake Scripting 사용하기 참조).
EXECUTE IMMEDIATE $$
DECLARE
ret1 NUMBER;
BEGIN
CALL sv_proc1('Manitoba', 127.4) into :ret1;
RETURN ret1;
END;
$$
;