저장 프로시저 호출하기

여러 가지 방법 중 하나로 저장 프로시저를 호출할 수 있습니다.

프로시저 호출 도구

프로시저를 호출할 도구를 선택합니다.

언어

접근 방식

SQL

SQL 명령을 실행합니다(예: Snowsight 사용).

SQL CALL 명령을 실행하여 프로시저를 호출합니다.

Snowpark를 사용하는 Java, Python 또는 Scala

지원되는 언어 중 하나로 로컬에서 코드를 작성하여 호출이 Snowflake에서 실행되도록 합니다.

다음 언어 중 하나로 Snowpark API를 사용하는 클라이언트 코드를 실행합니다.

명령줄

명령줄에서 명령을 실행하여 Snowflake 엔터티를 만들고 관리할 수 있습니다.

Snowflake CLI 의 명령을 실행합니다.

Python

클라이언트에서 Snowflake에서 관리 작업을 실행하는 코드를 작성합니다.

Snowflake Python API 를 사용하는 코드를 실행합니다.

RESTful API (언어 불문)

RESTful 엔드포인트에 요청하여 Snowflake 엔터티를 생성하고 관리하십시오.

Snowflake REST API 를 사용하여 프로시저를 생성하도록 요청합니다.

저장 프로시저를 호출할 권한이 있으면 CALL 문을 사용하여 저장 프로시저를 호출할 수 있습니다.

참고

익명 프로시저를 만들기도 하고 호출도 하려면 CALL(익명 프로시저 사용) 를 사용하십시오. 익명 프로시저를 만들고 호출하는 데는 CREATE PROCEDURE 스키마 권한이 있는 역할이 필요하지 않습니다.

사용법 노트

  • 프로시저 이름은 스키마 내에서 반드시 고유할 필요는 없으며, 저장 프로시저는 이름뿐만 아니라 인자 유형에 의해 식별되고 해결됩니다(즉, 저장 프로시저는 오버로드될 수 있습니다).

  • Snowflake Scripting 블록 외부에서 호출은 식의 일부가 될 수 없으므로 저장 프로시저에서 반환된 값을 사용할 수 없습니다.

    Snowflake Scripting 블록에서 INTO :snowflake_scripting_variable 을 지정하여 Snowflake Scripting 변수의 저장 프로시저에서 반환 값을 캡처할 수 있습니다.

  • 저장 프로시저는 원자성이 아닙니다. 저장 프로시저의 한 문이 실패할 경우 저장 프로시저의 다른 문이 반드시 롤백되는 것은 아닙니다. 저장 프로시저 및 트랜잭션에 대한 자세한 내용은 트랜잭션 관리 를 참조하십시오.

  • CALL(익명 프로시저 사용) 를 사용하여 익명 프로시저를 만들고 호출할 수도 있습니다.

SQL을 사용하여 저장 프로시저 호출하기

저장 프로시저에 인자가 있는 경우 해당 인자를 이름 또는 위치로 지정할 수 있습니다.

예를 들어 다음 저장 프로시저는 3개의 인자를 허용합니다.

CREATE OR REPLACE PROCEDURE sp_concatenate_strings(
    first_arg VARCHAR,
    second_arg VARCHAR,
    third_arg VARCHAR)
  RETURNS VARCHAR
  LANGUAGE SQL
  AS
  $$
  BEGIN
    RETURN first_arg || second_arg || third_arg;
  END;
  $$;
Copy

프로시저를 호출할 때 인자를 이름으로 지정할 수 있습니다.

CALL sp_concatenate_strings(
  first_arg => 'one',
  second_arg => 'two',
  third_arg => 'three');
Copy
+------------------------+
| SP_CONCATENATE_STRINGS |
|------------------------|
| onetwothree            |
+------------------------+

인자를 이름으로 지정하면 인자를 특정 순서로 지정할 필요가 없습니다.

CALL sp_concatenate_strings(
  third_arg => 'three',
  first_arg => 'one',
  second_arg => 'two');
Copy
+------------------------+
| SP_CONCATENATE_STRINGS |
|------------------------|
| onetwothree            |
+------------------------+

인자를 위치로 지정할 수도 있습니다.

CALL sp_concatenate_strings(
  'one',
  'two',
  'three');
Copy
+------------------------+
| SP_CONCATENATE_STRINGS |
|------------------------|
| onetwothree            |
+------------------------+

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

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

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

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

선택적 인자 지정하기

저장 프로시저에 선택적 인자 가 있는 경우 호출에서 선택적 인자를 생략할 수 있습니다. 각 선택적 인자에는 인자가 생략될 때 사용되는 기본값이 있습니다.

예를 들어 다음 저장 프로시저에는 필수 인자 1개와 선택적 인자 2개가 있습니다. 각 선택적 인자에는 기본값이 있습니다.

CREATE OR REPLACE PROCEDURE build_string_proc(
    word VARCHAR,
    prefix VARCHAR DEFAULT 'pre-',
    suffix VARCHAR DEFAULT '-post'
  )
  RETURNS VARCHAR
  LANGUAGE SQL
  AS
  $$
    BEGIN
      RETURN prefix || word || suffix;
    END;
  $$
  ;
Copy

호출에서 선택적 인자를 생략할 수 있습니다. 인자를 생략하면 인자의 기본값이 사용됩니다.

CALL build_string_proc('hello');
Copy
+-------------------+
| BUILD_STRING_PROC |
|-------------------|
| pre-hello-post    |
+-------------------+
CALL build_string_proc('hello', 'before-');
Copy
+-------------------+
| BUILD_STRING_PROC |
|-------------------|
| before-hello-post |
+-------------------+

선택적 인자를 생략하고 서명에서 생략된 인자 뒤에 나타나는 다른 선택적 인자를 지정해야 하는 경우 위치 인자 대신 명명된 인자를 사용하십시오.

예를 들어 prefix 인자를 생략하고 suffix 인자를 지정한다고 가정해 보겠습니다. suffix 인자는 서명에서 prefix 뒤에 나타나므로 인자를 이름으로 지정해야 합니다.

CALL build_string_proc(word => 'hello', suffix => '-after');
Copy
+-------------------+
| BUILD_STRING_PROC |
|-------------------|
| pre-hello-after   |
+-------------------+