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)