SQL 변수

이 항목에서는 Snowflake의 세션에서 SQL 변수를 정의하고 사용하는 방법을 설명합니다.

이 항목의 내용:

개요

Snowflake는 사용자가 선언한 SQL 변수를 지원합니다. 애플리케이션별 환경 설정을 저장하는 등 다양한 용도로 사용됩니다.

변수 식별자

SQL 변수는 대/소문자를 구분하지 않는 이름을 사용해 전역적으로 식별됩니다.

변수 DDL

Snowflake는 SQL 변수를 사용하기 위해 다음 DDL 명령을 제공합니다.

변수 초기화하기

SQL 문 SET 를 실행하거나 Snowflake에 연결할 때 연결 문자열에 변수를 설정하여 변수를 설정할 수 있습니다.

문자열 또는 이진 변수의 크기는 256바이트로 제한됩니다.

SQL을 사용해 세션에서 변수 초기화하기

SET 명령을 사용하여 SQL에서 변수를 초기화할 수 있습니다. 변수의 데이터 타입은 평가된 식 결과의 데이터 타입에서 파생됩니다.

SET MY_VARIABLE=10;
SET MY_VARIABLE='example';
Copy

같은 문에서 여러 변수를 초기화하여 서버와의 왕복 통신 횟수를 줄일 수 있습니다.

SET (VAR1, VAR2, VAR3)=(10, 20, 30);
SET (VAR1, VAR2, VAR3)=(SELECT 10, 20, 30);
Copy

연결 시 변수 설정하기

SET 를 사용해 세션 내에서 변수를 설정하는 것 외에도, Snowflake에서 세션을 초기화하는 데 사용되는 연결 문자열의 인자로서 변수를 전달할 수 있습니다. 이는 연결 문자열 지정이 유일하게 가능한 사용자 지정인 도구를 사용할 때 특히 유용합니다.

예를 들어 Snowflake JDBC 드라이버를 사용할 때 매개 변수로 해석될 추가 연결 속성을 설정할 수 있습니다. JDBC API에서는 SQL 변수가 문자열이어야 합니다.

// build connection properties
Properties properties = new Properties();

// Required connection properties
properties.put("user"    ,  "jsmith"      );
properties.put("password",  "mypassword");
properties.put("account" ,  "myaccount");

// Set some additional variables.
properties.put("$variable_1", "some example");
properties.put("$variable_2", "1"           );

// create a new connection
String connectStr = "jdbc:snowflake://localhost:8080";

// Open a connection under the snowflake account and enable variable support
Connection con = DriverManager.getConnection(connectStr, properties);
Copy

SQL에서 변수 사용하기

설명서에 명시된 경우를 제외하고, Snowflake에서 리터럴 상수가 허용되는 모든 곳에서 변수를 사용할 수 있습니다. 바인드 값 및 열 이름과 구분하기 위해, 모든 변수에 $ 기호를 접두사로 붙여야 합니다.

예:

SET (MIN, MAX)=(40, 70);

SELECT $MIN;

SELECT AVG(SALARY) FROM EMP WHERE AGE BETWEEN $MIN AND $MAX;
Copy

참고

$ 기호는 SQL 문에서 변수 식별에 사용되는 접두사이므로, 식별자에 사용할 때는 이 기호가 특수 문자로 취급됩니다. 식별자(데이터베이스 이름, 테이블 이름, 열 이름 등)는 전체 이름을 큰따옴표로 묶지 않는 한 특수 문자로 시작할 수 없습니다. 자세한 내용은 오브젝트 식별자 섹션을 참조하십시오.

변수는 테이블 이름과 같은 식별자 이름도 포함할 수 있습니다. 변수를 식별자로 사용하려면 변수를 IDENTIFIER() 내에 래핑해야 합니다(예: IDENTIFIER($MY_VARIABLE)). 아래에 몇 가지 예가 나와 있습니다.

CREATE TABLE IDENTIFIER($MY_TABLE_NAME) (i INTEGER);
INSERT INTO IDENTIFIER($MY_TABLE_NAME) (i) VALUES (42);
Copy
SELECT * FROM IDENTIFIER($MY_TABLE_NAME);
Copy
DROP TABLE IDENTIFIER($MY_TABLE_NAME);
Copy

FROM 절의 컨텍스트에서 아래에 표시된 것처럼 변수 이름을 TABLE() 에 래핑할 수 있습니다.

SELECT * FROM TABLE($MY_TABLE_NAME);
+----+
|  I |
|----|
| 42 |
+----+
Copy

IDENTIFIER()에 대한 자세한 내용은 식별자로서의 리터럴과 변수 를 참조하십시오.

세션에 대한 변수 보기

현재 세션에 정의된 모든 변수를 보려면 SHOW VARIABLES 명령을 사용하십시오.

SET (MIN, MAX)=(40, 70);

+----------------------------------+
| status                           |
|----------------------------------|
| Statement executed successfully. |
+----------------------------------+

SHOW VARIABLES;

+-------------+---------------------------------+---------------------------------+------+-------+-------+---------+
|  session_id | created_on                      | updated_on                      | name | value | type  | comment |
|-------------+---------------------------------+---------------------------------+------+-------+-------+---------|
| 34359992326 | Fri, 21 Apr 2017 11:20:32 -0700 | Fri, 21 Apr 2017 11:20:32 -0700 | MAX  | 70    | fixed |         |
| 34359992326 | Fri, 21 Apr 2017 11:20:32 -0700 | Fri, 21 Apr 2017 11:20:32 -0700 | MIN  | 40    | fixed |         |
+-------------+---------------------------------+---------------------------------+------+-------+-------+---------+
Copy

세션 변수 함수

다른 데이터베이스 시스템과의 호환성을 지원하고 변수 액세스를 위한 $ 구문을 지원하지 않는 도구를 통해 SQL을 실행할 수 있도록 세션 변수 조작을 위해 다음과 같은 편리한 함수가 제공됩니다. 이러한 함수는 모두 세션 변수 값을 문자열로 받아들이고 반환합니다.

  • SYS_CONTEXT 및 SET_SYS_CONTEXT

  • SESSION_CONTEXT 및 SET_SESSION_CONTEXT

  • GETVARIABLE 및 SETVARIABLE

다음은 GETVARIABLE 을 사용하는 예입니다. 먼저 SET를 사용하여 변수를 정의합니다.

SET var_artist_name = 'Jackson Browne';
Copy
+----------------------------------+
| status                           |
+----------------------------------+
| Statement executed successfully. |
+----------------------------------+

변수 값을 반환합니다.

SELECT GETVARIABLE('var_artist_name');
Copy

이 예에서는 Snowflake가 변수를 모두 대문자로 저장하므로 출력은 NULL입니다.

대/소문자 표기를 다음과 같이 업데이트합니다.

SELECT GETVARIABLE('VAR_ARTIST_NAME');
Copy
+--------------------------------+
| GETVARIABLE('VAR_ARTIST_NAME') |
+--------------------------------+
| Jackson Browne                 |
+--------------------------------+

예를 들어 WHERE 절에 변수 이름을 사용할 수 있습니다.

SELECT album_title
  FROM albums
  WHERE artist = $VAR_ARTIST_NAME;
Copy

변수 삭제/제거하기

SQL 변수는 세션에 대해 비공개입니다. Snowflake 세션이 닫히면 세션 중에 생성된 모든 변수가 삭제됩니다. 즉, 다른 세션에서 설정된 사용자 정의 변수에 누구도 접근할 수 없고, 세션이 닫히면 이러한 변수가 만료된다는 뜻입니다.

또한, 변수는 항상 UNSET 명령을 사용해 명시적으로 삭제할 수 있습니다.

예:

UNSET MY_VARIABLE;
Copy