CALL

저장 프로시저 를 호출합니다.

참고 항목:

CREATE PROCEDURE , SHOW PROCEDURES

구문

CALL <procedure_name> ( [ [ <arg_name> => ] <arg> , ... ] )
  [ INTO :<snowflake_scripting_variable> ]

필수 매개 변수

procedure_name ( [ [ arg_name => ] arg , ... ] )

호출할 프로시저의 식별자(procedure_name) 및 입력 인자를 지정합니다.

이름(arg_name => arg) 또는 위치(arg)로 입력 인자를 지정할 수 있습니다.

참고

  • 모든 인자를 이름 또는 위치로 지정해야 합니다. 일부 인자는 이름으로, 나머지 인자는 위치로 지정할 수 없습니다.

  • When you specify an argument by name, you can’t use double quotes around the argument name.

  • If two procedures have the same name but different argument types, you can use the argument names to specify which procedure to execute, if the argument names are different. For more information, see 프로시저 및 함수 오버로딩하기.

선택적 매개 변수

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;

Note: If you use Snowflake CLI, SnowSQL, the Classic Console, or the execute_stream or execute_string method in Python Connector code, use this example instead (see Using Snowflake Scripting in Snowflake CLI, SnowSQL, and Python Connector):

EXECUTE IMMEDIATE $$
DECLARE
  ret1 NUMBER;
BEGIN
  CALL sv_proc1('Manitoba', 127.4) into :ret1;
  RETURN ret1;
END;
$$
;