CALL

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

참고 항목:

CREATE PROCEDURE , SHOW PROCEDURES

구문

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

필수 매개 변수

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

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

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

다음 사항을 참고하십시오.

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

    이름으로 인자를 지정할 때 인자 이름 주위에 큰따옴표를 사용할 수 없습니다.

  • 두 함수 또는 두 프로시저가 이름은 같지만 인자 유형이 다른 경우 인자 이름이 다르면 인자 이름을 사용하여 실행할 함수 또는 프로시저를 지정할 수 있습니다. 프로시저 및 함수 오버로딩하기 섹션을 참조하십시오.

선택적 매개 변수

INTO :snowflake_scripting_variable

지정된 Snowflake Scripting 변수 를 저장 프로시저의 반환 값으로 설정합니다.

저장 프로시저 생성 및 호출에 대한 보다 다양한 예는 저장 프로시저 관련 작업하기 을 참조하십시오.

CALL stproc1(5.14::FLOAT);
Copy

저장 프로시저에 대한 각 인자는 일반 식일 수 있습니다.

CALL stproc1(2 * 5.14::FLOAT);
Copy

인자는 하위 쿼리일 수 있습니다.

CALL stproc1(SELECT COUNT(*) FROM stproc_test_table1);
Copy

CALL 문당 하나의 저장 프로시저만 호출할 수 있습니다. 예를 들어 다음 문은 실패합니다.

CALL proc1(1), proc2(2);                          -- Not allowed
Copy

또한, 저장 프로시저 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
Copy

하지만 저장 프로시저 내에서, 저장 프로시저는 다른 저장 프로시저를 호출하거나 재귀적으로 자신을 호출할 수 있습니다.

조심

중첩 호출은 최대 허용 스택 깊이를 초과할 수 있으므로 호출을 중첩할 때, 특히 재귀를 사용할 때 주의하십시오.

다음 예에서는 sv_proc1 이라는 저장 프로시저를 호출하고 문자열 리터럴과 숫자를 입력 인자로 전달합니다. 이 예에서는 위치로 인자를 지정합니다.

CALL sv_proc1('Manitoba', 127.4);
Copy

이름으로 인자를 지정할 수도 있습니다.

CALL sv_proc1(province => 'Manitoba', amount => 127.4);
Copy

다음 예에서는 세션 변수 를 저장 프로시저에 대한 입력 인수로 설정하고 전달하는 방법을 보여줍니다.

SET Variable1 = 49;
CALL sv_proc2($Variable1);
Copy

다음은 Snowflake Scripting 변수에서 저장 프로시저의 반환 값을 캡처하는 Snowflake Scripting 블록의 예입니다.

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

참고: 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;
$$
;
Copy