카테고리:

사용자 정의 함수, 외부 함수 및 저장 프로시저용 DDL

CREATE PROCEDURE

저장 프로시저 를 만듭니다.

프로시저는 다음 언어 중 하나로 작성할 수 있습니다.

참고

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

참고 항목:

ALTER PROCEDURE, DROP PROCEDURE , SHOW PROCEDURES , DESCRIBE PROCEDURE, CALL

구문

Java 및 Scala

인라인 저장 프로시저의 경우 다음 구문을 사용합니다.

CREATE [ OR REPLACE ] [ SECURE ] PROCEDURE <name> ( [ <arg_name> <arg_data_type> ] [ , ... ] )
  RETURNS <result_data_type> [ NOT NULL ]
  LANGUAGE { SCALA | JAVA }
  RUNTIME_VERSION = '<scala_or_java_runtime_version>'
  PACKAGES = ( 'com.snowflake:snowpark:<version>' [, '<package_name_and_version>' ...] )
  [ IMPORTS = ( '<stage_path_and_file_name_to_read>' [, '<stage_path_and_file_name_to_read>' ...] ) ]
  HANDLER = '<fully_qualified_method_name>'
  [ TARGET_PATH = '<stage_path_and_file_name_to_write>' ]
  [ { CALLED ON NULL INPUT | { RETURNS NULL ON NULL INPUT | STRICT } } ]
  [ VOLATILE | IMMUTABLE ] -- Note: VOLATILE and IMMUTABLE are deprecated.
  [ COMMENT = '<string_literal>' ]
  [ EXECUTE AS { CALLER | OWNER } ]
  AS '<procedure_definition>'

ScalaJava에서 미리 컴파일된 저장 프로시저 의 경우 다음 구문을 사용합니다.

CREATE [ OR REPLACE ] [ SECURE ] PROCEDURE <name> ( [ <arg_name> <arg_data_type> ] [ , ... ] )
  RETURNS <result_data_type> [ NOT NULL ]
  LANGUAGE { SCALA | JAVA }
  RUNTIME_VERSION = '<scala_or_java_runtime_version>'
  PACKAGES = ( 'com.snowflake:snowpark:<version>' [, '<package_name_and_version>' ...] )
  [ IMPORTS = ( '<stage_path_and_file_name_to_read>' [, '<stage_path_and_file_name_to_read>' ...] ) ]
  HANDLER = '<fully_qualified_method_name>'
  [ { CALLED ON NULL INPUT | { RETURNS NULL ON NULL INPUT | STRICT } } ]
  [ VOLATILE | IMMUTABLE ] -- Note: VOLATILE and IMMUTABLE are deprecated.
  [ COMMENT = '<string_literal>' ]
  [ EXECUTE AS { CALLER | OWNER } ]

JavaScript

CREATE [ OR REPLACE ] [ SECURE ] PROCEDURE <name> ( [ <arg_name> <arg_data_type> ] [ , ... ] )
  RETURNS <result_data_type> [ NOT NULL ]
  LANGUAGE JAVASCRIPT
  [ { CALLED ON NULL INPUT | { RETURNS NULL ON NULL INPUT | STRICT } } ]
  [ VOLATILE | IMMUTABLE ] -- Note: VOLATILE and IMMUTABLE are deprecated.
  [ COMMENT = '<string_literal>' ]
  [ EXECUTE AS { CALLER | OWNER } ]
  AS '<procedure_definition>'

중요

JavaScript는 대/소문자를 구분하는 반면, SQL은 대/소문자를 구분하지 않습니다. JavaScript 코드에서 저장 프로시저 인자 이름을 사용하는 방법에 대한 중요한 정보는 JavaScript 인자의 대/소문자 구분 섹션을 참조하십시오.

Python

인라인 저장 프로시저의 경우 다음 구문을 사용합니다.

CREATE [ OR REPLACE ] [ SECURE ] PROCEDURE <name> ( [ <arg_name> <arg_data_type> ] [ , ... ] )
  RETURNS <result_data_type> [ NOT NULL ]
  LANGUAGE PYTHON
  RUNTIME_VERSION = '<python_version>'
  PACKAGES = ( 'snowflake-snowpark-python[==<version>]'[, '<package_name>[==<version>]` ... ])
  [ IMPORTS = ( '<stage_path_and_file_name_to_read>' [, '<stage_path_and_file_name_to_read>' ...] ) ]
  HANDLER = '<function_name>'
  [ { CALLED ON NULL INPUT | { RETURNS NULL ON NULL INPUT | STRICT } } ]
  [ VOLATILE | IMMUTABLE ] -- Note: VOLATILE and IMMUTABLE are deprecated.
  [ COMMENT = '<string_literal>' ]
  [ EXECUTE AS { CALLER | OWNER } ]
  AS '<procedure_definition>'

코드가 스테이지의 파일에 있는 저장 프로시저의 경우 다음 구문을 사용하십시오.

CREATE [ OR REPLACE ] PROCEDURE <name> ( [ <arg_name> <arg_data_type> ] [ , ... ] )
  RETURNS <result_data_type> [ NOT NULL ]
  LANGUAGE PYTHON
  RUNTIME_VERSION = '<python_version>'
  PACKAGES = ( 'snowflake-snowpark-python[==<version>]'[, '<package_name>[==<version>]` ... ])
  [ IMPORTS = ( '<stage_path_and_file_name_to_read>' [, '<stage_path_and_file_name_to_read>' ...] ) ]
  HANDLER = '<module_file_name>.<function_name>'
  [ { CALLED ON NULL INPUT | { RETURNS NULL ON NULL INPUT | STRICT } } ]
  [ VOLATILE | IMMUTABLE ] -- Note: VOLATILE and IMMUTABLE are deprecated.
  [ COMMENT = '<string_literal>' ]
  [ EXECUTE AS { CALLER | OWNER } ]

Snowflake Scripting

CREATE [ OR REPLACE ] PROCEDURE <name> ( [ <arg_name> <arg_data_type> ] [ , ... ] )
  RETURNS { <result_data_type> | TABLE ( [ <col_name> <col_data_type> [ , ... ] ] ) }
    [ NOT NULL ]
  LANGUAGE SQL
  [ { CALLED ON NULL INPUT | { RETURNS NULL ON NULL INPUT | STRICT } } ]
  [ VOLATILE | IMMUTABLE ] -- Note: VOLATILE and IMMUTABLE are deprecated.
  [ COMMENT = '<string_literal>' ]
  [ EXECUTE AS { CALLER | OWNER } ]
  AS <procedure_definition>

참고

SnowSQL 또는 클래식 웹 인터페이스에서 Snowflake 스크립팅 프로시저를 생성하는 경우 procedure definition 주위에 문자열 리터럴 구분 기호 (' 또는 $$)를 사용해야 합니다. SnowSQL 및 클래식 웹 인터페이스에서 Snowflake Scripting 사용하기 섹션을 참조하십시오.

필수 매개 변수

모든 언어

name ( [ arg_name arg_data_type ] [ , ... ] )

저장 프로시저에 대한 식별자(name) 및 입력 인자를 지정합니다.

RETURNS result_data_type [ NOT NULL ]

저장 프로시저에서 반환된 결과 타입을 지정합니다.

  • result_data_type 의 경우, 사용 중인 언어의 타입에 해당하는 Snowflake 데이터 타입을 사용합니다.

    참고

    Snowpark(Java 또는 Scala)에서 작성하는 저장 프로시저에는 반환 값이 있어야 합니다. Snowpark(Python)에서 저장 프로시저가 아무런 값도 반환하지 않으면 None 을 반환하는 것으로 간주됩니다. 프로시저가 명시적으로 아무 것도 반환하지 않더라도 모든 CREATE PROCEDURE 문에는 반환 타입을 정의하는 RETURNS 절이 포함되어야 합니다.

  • RETURNS TABLE ( [ col_name col_data_type [ , ... ] ] ) 의 경우 반환된 테이블에 있는 열의 Snowflake 데이터 타입 을 알면 열 이름과 유형을 지정하십시오.

    CREATE OR REPLACE PROCEDURE get_top_sales()
    RETURNS TABLE (sales_date DATE, quantity NUMBER)
    ...
    

    그렇지 않으면(예: 런타임 중에 열 유형을 결정하는 경우) 열 이름과 유형을 생략할 수 있습니다.

    CREATE OR REPLACE PROCEDURE get_top_sales()
    RETURNS TABLE ()
    

    참고

    현재, CREATE PROCEDURERETURNS TABLE(...) 절에서는 GEOGRAPHY를 열 유형으로 지정할 수 없습니다.

    CREATE OR REPLACE PROCEDURE test_return_geography_table_1()
    RETURNS TABLE(g GEOGRAPHY)
    ...
    

    그렇게 할 경우 저장 프로시저를 호출하면 오류가 발생합니다.

    CALL test_return_geography_table_1();
    
    Stored procedure execution error: data type of returned table does not match expected returned table type
    

    이 문제를 해결하려면 RETURNS TABLE() 에서 열 인자와 유형을 생략하면 됩니다.

    CREATE OR REPLACE PROCEDURE test_return_geography_table_1()
    RETURNS TABLE()
    ...
    

    RETURNS TABLE(...) 은 테이블을 반환하는 Snowflake Scripting 저장 프로시저에서만 지원됩니다. RETURN 섹션을 참조하십시오.

실제로는, 호출이 식의 일부가 될 수 없으므로 반환된 값을 사용할 수 없습니다.

LANGUAGE language

저장 프로시저 코드의 언어를 지정합니다. 이는 Snowflake Scripting 으로 작성된 저장 프로시저의 경우 선택 사항입니다.

현재, 지원되는 language 값은 다음과 같습니다.

기본값: SQL.

AS procedure_definition

저장 프로시저에 의해 실행되는 코드를 정의합니다. 정의는 어떤 유효한 코드로든 구성될 수 있습니다.

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

  • 코드가 인라인이 아닌 저장 프로시저의 경우 AS 절을 생략합니다. 여기에는 Snowpark ScalaJava 의 사전 컴파일된 저장 프로시저와 코드가 스테이지에 있는 Python 저장 프로시저 가 포함됩니다.

    대신 IMPORTS 절을 사용하여 저장 프로시저에 대한 코드가 포함된 파일의 위치를 지정하십시오. 자세한 내용은 다음을 참조하십시오.

  • 다음의 경우에는 procedure definition 주위에 문자열 구분 기호 (' 또는 $$)를 사용해야 합니다.

  • JavaScript로 저장 프로시저를 작성하고, 줄 바꿈을 포함하는 문자열을 작성하는 경우, 문자열 주위에 역따옴표(《억음 부호》라고도 함)를 사용할 수 있습니다.

    JavaScript 저장 프로시저의 다음 예에서는 저장 프로시저의 본문에 작은따옴표와 큰따옴표가 포함되어 있으므로 $$ 및 역따옴표를 사용합니다.

    CREATE OR REPLACE TABLE table1 ("column 1" VARCHAR);
    
    CREATE or replace PROCEDURE proc3()
      RETURNS VARCHAR
      LANGUAGE javascript
      AS
      $$
      var rs = snowflake.execute( { sqlText: 
          `INSERT INTO table1 ("column 1") 
               SELECT 'value 1' AS "column 1" ;`
           } );
      return 'Done.';
      $$;
    
  • Snowflake Scripting 이외의 언어의 경우 Snowflake는 CREATE PROCEDURE 명령을 실행할 때 코드의 유효성을 완전히 검증하지는 않습니다.

    예를 들어 Snowpark(Scala) 저장 프로시저의 경우 입력 인자의 수와 타입은 검증되지만, 함수 본문은 검증되지 않습니다. 숫자 또는 타입이 일치하지 않는 경우(예: 인자가 숫자가 아닌 타입일 때 Snowflake 데이터 타입 NUMBER가 사용되는 경우) CREATE PROCEDURE 명령을 실행하면 오류가 발생합니다.

    코드가 유효하지 않으면 CREATE PROCEDURE 명령이 성공하고, 저장 프로시저가 호출될 때 오류가 반환됩니다.

저장 프로시저에 대한 자세한 내용은 저장 프로시저 작업하기 섹션을 참조하십시오.

Java, Python 또는 Scala

RUNTIME_VERSION = 'language_runtime_version'

사용할 언어 런타임 버전입니다. 현재 지원되는 버전은 다음과 같습니다.

  • Java: 11

  • Python: 3.8

  • Scala: 2.12

PACKAGES = ( 'snowpark_package_name' [, 'package_name' ...] )

Snowflake에 배포되어 처리기 코드의 실행 환경에 포함해야 하는 패키지의 이름이 수록된 쉼표로 구분된 목록입니다. Snowpark 패키지는 저장 프로시저에 필수적이므로, PACKAGES 절에서 항상 참조해야 합니다. Snowpark에 대한 자세한 내용은 Snowpark 섹션을 참조하십시오.

기본적으로, Snowflake가 저장 프로시저를 실행하는 환경에는 지원되는 언어용으로 선택된 패키지 세트가 포함됩니다. PACKAGES 절에서 이러한 패키지를 참조할 때 Snowflake에서 해당 패키지를 이미 제공하므로 IMPORTS 절에 패키지가 포함된 파일을 참조할 필요가 없습니다. 패키지 버전을 지정할 수도 있습니다.

특정 언어에 대해 지원되는 패키지 및 버전 목록을 보려면 INFORMATION_SCHEMA.PACKAGES 뷰 에서 언어를 지정하는 행을 쿼리하십시오. 예:

select * from information_schema.packages where language = '<language>';

여기서 languagejava, python 또는 scala 입니다.

아래의 설명과 같이, PACKAGES에서 패키지를 참조하는 구문은 패키지의 언어에 따라 다릅니다.

  • Java

    다음 형식을 사용하여 패키지 이름과 버전 번호를 지정합니다.

    domain:package_name:version
    

    최신 버전을 지정하려면 version 에 대해 latest 를 지정하십시오.

    예를 들어 Snowflake에 최신 Snowpark 라이브러리의 패키지를 포함하려면 다음을 사용하십시오.

    PACKAGES = ('com.snowflake:snowpark:latest')
    

    Snowpark 라이브러리에서 패키지를 지정할 때 버전 1.3.0 이상을 지정해야 합니다.

  • Python

    Snowflake에는 Anaconda를 통해 구할 수 있는 패키지가 다수 포함되어 있습니다. 서드 파티 패키지 사용하기 섹션을 참조하십시오.

    다음 형식을 사용하여 패키지 이름과 버전 번호를 지정합니다.

    package_name[==version]
    

    최신 버전을 지정하려면 버전 번호를 생략하십시오.

    예를 들어, (필요한 Snowpark 패키지의 최신 버전과 함께) spacy 패키지 버전 2.3.5를 포함하려면 다음을 사용하십시오.

    PACKAGES = ('snowflake-snowpark-python', 'spacy==2.3.5')
    

    Snowpark 라이브러리에서 패키지를 지정할 때 버전 0.4.0 이상을 지정해야 합니다. Snowflake에서 사용 가능한 최신 버전을 사용하려면 버전 번호를 생략하십시오.

  • Scala

    다음 형식을 사용하여 패키지 이름과 버전 번호를 지정합니다.

    domain:package_name:version
    

    최신 버전을 지정하려면 version 에 대해 latest 를 지정하십시오.

    예를 들어 Snowflake에 최신 Snowpark 라이브러리의 패키지를 포함하려면 다음을 사용하십시오.

    PACKAGES = ('com.snowflake:snowpark:latest')
    

    Snowflake는 Scala 저장 프로시저에서 Snowpark 버전 0.9.0 이상 사용을 지원합니다. 그러나 이러한 버전에는 제한 사항이 있습니다. 예를 들어 1.1.0 이전 버전은 저장 프로시저에서 트랜잭션 사용을 지원하지 않습니다.

HANDLER = 'fully_qualified_method_name'

  • Python

    저장 프로시저의 함수 또는 메서드의 이름을 사용합니다. 이는 코드가 인라인인지, 또는 스테이지에서 참조되는지에 따라 다를 수 있습니다.

    • 코드가 인라인이면 다음 예제에서처럼 함수 이름만 지정할 수 있습니다.

      CREATE OR REPLACE PROCEDURE MYPROC(from_table STRING, to_table STRING, count INT)
        ...
        HANDLER = 'run'
      AS
      $$
      def run(session, from_table, to_table, count):
        ...
      $$;
      
    • 코드를 스테이지에서 가져올 때 정규화된 핸들러 함수 이름을 <모듈_이름>.<함수_이름> 으로 지정합니다.

      CREATE OR REPLACE PROCEDURE MYPROC(from_table STRING, to_table STRING, count INT)
        ...
        IMPORTS = ('@mystage/my_py_file.py')
        HANDLER = 'my_py_file.run';
      
  • Java 및 Scala

    저장 프로시저에 대한 메서드 또는 함수의 정규화된 이름을 사용합니다. 이것은 일반적으로 다음과 같은 형식입니다.

    com.my_company.my_package.MyClass.myMethod
    

    여기서,

    com.my_company.my_package
    

    오브젝트 또는 클래스를 포함하는 패키지에 해당합니다.

    package com.my_company.my_package;
    

선택적 매개 변수

모든 언어

SECURE

프로시저가 안전한 것으로 지정합니다. 보안 프로시저에 대한 자세한 내용은 Secure UDF와 저장 프로시저로 민감한 정보 보호하기 섹션을 참조하십시오.

[ [ NOT ] NULL ]

저장 프로시저가 NULL 값을 반환할 수 있는지, 아니면 NULL이 아닌 값만 반환해야 하는지 여부를 지정합니다.

기본값은 NULL입니다(즉, 저장 프로시저가 NULL을 반환할 수 있음).

CALLED ON NULL INPUT 또는 . RETURNS NULL ON NULL INPUT | STRICT

null 입력으로 호출 시 저장 프로시저의 동작을 지정합니다. 입력값이 null일 때 항상 null을 반환하는 시스템 정의 함수와는 반대로, 저장 프로시저는 null 입력을 처리하여 입력값이 null일 때도 null이 아닌 값을 반환할 수 있습니다.

  • CALLED ON NULL INPUT 은 항상 null 입력으로 저장 프로시저를 호출합니다. 그와 같은 값을 적절히 처리하는 것은 프로시저에 달려 있습니다.

  • RETURNS NULL ON NULL INPUT (또는 동의어 STRICT)은 입력값이 null인 경우 저장 프로시저를 호출하지 않으므로, 저장 프로시저 내의 문이 실행되지 않습니다. 대신, 항상 null 값이 반환됩니다. 프로시저는 null이 아닌 입력값에 대해 여전히 null을 반환할 수도 있습니다.

기본값: CALLED ON NULL INPUT

VOLATILE | IMMUTABLE

사용되지 않음

주의

이러한 키워드는 저장 프로시저에 더 이상 사용되지 않습니다. 이러한 키워드의 목적은 저장 프로시저에 적용하는 것이 아닙니다. 향후 릴리스에서는 설명서에서 이러한 키워드를 제거할 예정입니다.

COMMENT = 'string_literal'

SHOW PROCEDURES 출력의 DESCRIPTION 열에 표시되는 저장 프로시저에 대한 설명을 지정합니다.

기본값: stored procedure

EXECUTE AS CALLER 또는 . EXECUTE AS OWNER

저장 프로시저가 소유자의 권한(《소유자 권한》 저장 프로시저)으로 실행되는지, 아니면 호출자의 권한(《호출자 권한》 저장 프로시저)으로 실행되는지 지정합니다.

  • CREATE PROCEDURE ... EXECUTE AS CALLER 문을 실행하면 나중에 프로시저가 호출자의 권한 프로시저로 실행됩니다.

  • CREATE PROCEDURE ... EXECUTE AS OWNER 를 실행하면 프로시저가 소유자의 권한 프로시저로 실행됩니다.

기본적으로(프로시저 생성 시 OWNER도, CALLER도 명시적으로 지정하지 않은 경우), 이 프로시저는 소유자의 권한 저장 프로시저로 실행됩니다.

소유자의 권한 저장 프로시저는 호출자의 환경(예: 호출자의 세션 변수)에 대한 액세스 권한이 적고, Snowflake는 기본적으로 이처럼 더 높은 수준의 개인정보 보호 및 보안을 적용합니다.

자세한 내용은 호출자 권한 및 소유자 권한 저장 프로시저 이해하기 섹션을 참조하십시오.

기본값: OWNER

Java, Python 또는 Scala

IMPORTS = ( 'stage_path_and_file_name_to_read' [, 'stage_path_and_file_name_to_read' ...] )

가져올 파일의 위치(스테이지), 경로, 이름입니다. 저장 프로시저가 의존하는 모든 파일을 포함하도록 IMPORTS 절을 설정해야 합니다.

  • 인라인 저장 프로시저를 작성하는 경우, 코드가 저장 프로시저 또는 리소스 파일 외부에 정의된 클래스에 종속되지 않는 한 이 절을 생략할 수 있습니다.

  • Java 또는 Scala: 미리 컴파일된 저장 프로시저를 작성하는 경우 저장 프로시저의 정의가 포함된 JAR 파일의 경로도 포함해야 합니다.

  • Python: 저장 프로시저의 코드가 스테이지에 있을 경우 코드가 있는 모듈 파일의 경로도 포함해야 합니다.

파일이 다른 하위 디렉터리나 다른 스테이지에 있더라도 IMPORTS 절의 각 파일은 고유한 이름을 가져야 합니다.

TARGET_PATH = 'stage_path_and_file_name_to_write'

Java 또는 Scala로 작성된 저장 프로시저 코드의 경우 TARGET_PATH 절은 procedure_definition 에 지정된 소스 코드를 컴파일한 후 Snowflake가 컴파일된 코드(JAR 파일)를 작성해야 하는 위치를 지정합니다. 이 절을 생략할 경우 Snowflake는 코드가 필요할 때마다 소스 코드를 다시 컴파일합니다.

참고

이 절은 코드가 Python으로 작성된 저장 프로시저에는 필요하지 않습니다.

이 절을 지정하는 경우:

  • 이를 기존 파일로 설정할 수 없습니다. TARGET_PATH 가 기존 파일을 가리키는 경우 Snowflake는 오류를 반환합니다.

  • IMPORTSTARGET_PATH 절을 둘 다 지정하는 경우, 파일이 다른 하위 디렉터리 또는 다른 스테이지에 있더라도 IMPORTS 절의 파일 이름은 TARGET_PATH 절의 각 파일 이름과 달라야 합니다.

  • 더 이상 저장 프로시저를 사용할 필요가 없으면(예: 저장 프로시저를 삭제한 경우) 이 JAR 파일을 수동으로 제거해야 합니다.

사용법 노트

  • 모든 저장 프로시저의 경우:

    • 저장 프로시저는 오버로딩 을 지원합니다. 두 프로시저에 있는 매개 변수의 개수가 다르거나 매개 변수에 대한 데이터 타입이 다른 경우 두 프로시저는 같은 이름을 가질 수 있습니다.

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

    • CREATE OR REPLACE <오브젝트> 문은 원자성입니다. 즉, 오브젝트가 바뀔 때 이전 오브젝트 삭제와 새 오브젝트 생성이 단일 트랜잭션으로 처리됩니다.

    • 메타데이터 관련:

      주의

      고객은 Snowflake 서비스를 사용할 때 개인 데이터(사용자 오브젝트 제외), 민감한 데이터, 수출 통제 대상 데이터 또는 기타 규제 데이터가 메타데이터로 입력되지 않도록 해야 합니다. 자세한 내용은 Snowflake의 메타데이터 필드 섹션을 참조하십시오.

    조직에서 호출자의 권한 저장 프로시저와 소유자의 권한 저장 프로시저를 혼합하여 사용하는 경우, 저장 프로시저의 명명 규칙을 사용하여 개별 저장 프로시저가 호출자의 권한 저장 프로시저인지, 소유자의 권한 저장 프로시저인지를 나타낼 수 있습니다.

  • JavaScript 저장 프로시저의 경우:

    • JavaScript 저장 프로시저는 문자열(예: 성공/실패 표시기) 또는 숫자(예: 오류 코드)와 같은 단일 값만 반환할 수 있습니다. 더 광범위한 정보를 반환해야 하는 경우 구분 기호(예: 쉼표)로 구분된 값을 포함하는 VARCHAR나 VARIANT 와 같은 반정형 데이터 타입을 반환할 수 있습니다.

  • Java 저장 프로시저의 경우 알려진 제한 사항 을 참조하십시오.

  • Python 저장 프로시저의 경우 알려진 제한 사항 을 참조하십시오.

  • Scala 저장 프로시저의 경우 알려진 제한 사항 을 참조하십시오.

이렇게 하면 하드 코드된 값을 반환하는 보통의 저장 프로시저가 생성됩니다. 이것은 비현실적이지만, 최소한의 JavaScript 코드로 기본 SQL 구문을 보여줍니다.

create or replace procedure sp_pi()
    returns float not null
    language javascript
    as
    $$
    return 3.1415926;
    $$
    ;

이는 JavaScript API에 대한 호출을 포함하는 더 현실적인 예를 보여줍니다. 이 프로시저의 더 광범위한 버전을 사용하면 사용자가 직접 삽입할 권한이 없는 테이블에 데이터를 삽입할 수 있습니다. JavaScript 문은 입력 매개 변수를 확인하고 특정 요구 사항이 충족되는 경우에만 SQL INSERT 를 실행할 수 있습니다.

create or replace procedure stproc1(FLOAT_PARAM1 FLOAT)
    returns string
    language javascript
    strict
    execute as owner
    as
    $$
    var sql_command = 
     "INSERT INTO stproc_test_table1 (num_col1) VALUES (" + FLOAT_PARAM1 + ")";
    try {
        snowflake.execute (
            {sqlText: sql_command}
            );
        return "Succeeded.";   // Return a success/error indicator.
        }
    catch (err)  {
        return "Failed: " + err;   // Return a success/error indicator.
        }
    $$
    ;

더 많은 예는 저장 프로시저 작업하기 섹션을 참조하십시오.

맨 위로 이동