SnowSQL 및 Classic Console 에서 Snowflake Scripting 사용하기

이 항목에서는 SnowSQL 및 Classic Console 에서 Snowflake Scripting 예를 실행하는 방법을 설명합니다.

참고

다른 클라이언트 및 인터페이스(예: Snowsight 또는 JDBC 드라이버)를 사용하는 경우 이 항목을 건너뛰고 Snowflake Scripting 블록 에 대한 다음 섹션으로 이동할 수 있습니다.

이 항목의 내용:

소개

현재, SnowSQLClassic Console 은 Snowflake Scripting 블록을 올바르게 구문 분석하지 않습니다. Snowflake Scripting 블록을 입력하고 실행하면 다음 오류가 발생할 수 있습니다.

SQL compilation error: syntax error line 2 at position 25 unexpected '<EOF>'
Copy

이 문제를 해결하려면, SnowSQL 또는 Classic Console 을 사용하는 경우 Snowflake Scripting 블록의 시작과 끝 주위에 구분 기호를 사용해야 합니다.

다음 섹션에서는 이 작업을 수행하는 방법을 설명합니다.

저장 프로시저의 블록 주위에 문자열 상수 구분 기호 사용하기

SnowSQL 또는 Classic Console 에서 저장 프로시저를 만드는 경우 Snowflake Scripting 블록을 작은따옴표 또는 이중 달러 기호 로 묶습니다. 예:

CREATE OR REPLACE PROCEDURE myprocedure()
  RETURNS VARCHAR
  LANGUAGE SQL
  AS
  $$
    -- Snowflake Scripting code
    DECLARE
      radius_of_circle FLOAT;
      area_of_circle FLOAT;
    BEGIN
      radius_of_circle := 3;
      area_of_circle := pi() * radius_of_circle * radius_of_circle;
      RETURN area_of_circle;
    END;
  $$
  ;
Copy

EXECUTE IMMEDIATE에 문자열 리터럴로 블록 전달하기

익명 블록 을 작성하는 경우 블록을 EXECUTE IMMEDIATE 명령에 문자열 리터럴로 전달합니다. 문자열 리터럴을 구분하려면 작은따옴표 또는 이중 달러 기호 를 사용하십시오.

예:

EXECUTE IMMEDIATE $$
-- Snowflake Scripting code
DECLARE
  radius_of_circle FLOAT;
  area_of_circle FLOAT;
BEGIN
  radius_of_circle := 3;
  area_of_circle := pi() * radius_of_circle * radius_of_circle;
  RETURN area_of_circle;
END;
$$
;
Copy

대안으로, 블록을 포함하는 문자열 리터럴인 세션 변수 를 정의하고 해당 세션 변수를 EXECUTE IMMEDIATE 명령에 전달할 수 있습니다. 예:

set stmt =
$$
declare
    radius_of_circle float;
    area_of_circle float;
begin
    radius_of_circle := 3;
    area_of_circle := pi() * radius_of_circle * radius_of_circle;
    return area_of_circle;
end;
$$
;

execute immediate $stmt;
Copy