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

Each argument to a stored procedure can be a general expression:

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

An argument can be a subquery:

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

You can call only one stored procedure per CALL statement. For example, the following statement fails:

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

Also, you cannot use a stored procedure CALL as part of an expression. For example, all the following statements fail:

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

However, inside a stored procedure, the stored procedure can call another stored procedure, or call itself recursively.

조심

Nested calls can exceed the maximum allowed stack depth, so be careful when nesting calls, especially when using recursion.

다음 예에서는 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 코드에서 SnowSQL, Classic Console 또는 execute_stream 또는 execute_string 메서드를 사용하는 경우 이 예제를 대신 사용하십시오(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