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';
같은 문에서 여러 변수를 초기화하여 서버와의 왕복 통신 횟수를 줄일 수 있습니다.
SET (var1, var2, var3)=(10, 20, 30);
SET (var1, var2, var3)=(SELECT 10, 20, 30);
연결 시 변수 설정하기¶
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);
SQL에서 변수 사용하기¶
설명서에 명시된 경우를 제외하고, Snowflake에서 리터럴 상수가 허용되는 모든 곳에서 변수를 사용할 수 있습니다. 바인드 값 및 열 이름과 구분하기 위해, 모든 변수에 $
기호를 접두사로 붙여야 합니다.
예:
SET (min, max)=(40, 70);
SELECT $min;
SELECT AVG(salary) FROM emp WHERE age BETWEEN $min AND $max;
참고
$
기호는 SQL 문에서 변수 식별에 사용되는 접두사이므로, 식별자에 사용할 때는 이 기호가 특수 문자로 취급됩니다. 식별자(데이터베이스 이름, 테이블 이름, 열 이름 등)는 전체 이름을 큰따옴표로 묶지 않는 한 특수 문자로 시작할 수 없습니다. 자세한 내용은 오브젝트 식별자 섹션을 참조하십시오.
변수는 테이블 이름과 같은 식별자 이름도 포함할 수 있습니다. 변수를 식별자로 사용하려면 변수를 IDENTIFIER()
내에 래핑해야 합니다(예: IDENTIFIER($my_variable)
). 아래에 몇 가지 예가 나와 있습니다.
SET my_table_name='table1';
CREATE TABLE IDENTIFIER($my_table_name) (i INTEGER);
INSERT INTO IDENTIFIER($my_table_name) (i) VALUES (42);
SELECT * FROM IDENTIFIER($my_table_name);
+----+
| I |
|----|
| 42 |
+----+
FROM 절의 컨텍스트에서 아래에 표시된 것처럼 변수 이름을 TABLE()
에 래핑할 수 있습니다.
SELECT * FROM TABLE($my_table_name);
+----+
| I |
|----|
| 42 |
+----+
DROP TABLE IDENTIFIER($my_table_name);
IDENTIFIER()
에 대한 자세한 내용은 식별자로서의 리터럴과 변수 를 참조하십시오.
세션에 대한 변수 보기¶
현재 세션에 정의된 모든 변수를 보려면 SHOW VARIABLES 명령을 사용하십시오.
SET (min, max)=(40, 70);
+----------------------------------+
| status |
|----------------------------------|
| Statement executed successfully. |
+----------------------------------+
SHOW VARIABLES;
+----------------+-------------------------------+-------------------------------+------+-------+-------+---------+
| session_id | created_on | updated_on | name | value | type | comment |
|----------------+-------------------------------+-------------------------------+------+-------+-------+---------|
| 10363773891062 | 2024-06-28 10:09:57.990 -0700 | 2024-06-28 10:09:58.032 -0700 | MAX | 70 | fixed | |
| 10363773891062 | 2024-06-28 10:09:57.990 -0700 | 2024-06-28 10:09:58.021 -0700 | MIN | 40 | fixed | |
+----------------+-------------------------------+-------------------------------+------+-------+-------+---------+
세션 변수 함수¶
다른 데이터베이스 시스템과의 호환성을 지원하고 변수 액세스를 위한 $
구문을 지원하지 않는 도구를 통해 SQL을 실행할 수 있도록 세션 변수 조작을 위해 다음과 같은 편리한 함수가 제공됩니다. 이러한 함수는 모두 세션 변수 값을 문자열로 받아들이고 반환합니다.
SYS_CONTEXT 및 SET_SYS_CONTEXT
SESSION_CONTEXT 및 SET_SESSION_CONTEXT
GETVARIABLE 및 SETVARIABLE
다음은 GETVARIABLE 을 사용하는 예입니다. 먼저 SET를 사용하여 변수를 정의합니다.
SET var_artist_name = 'Jackson Browne';
+----------------------------------+
| status |
+----------------------------------+
| Statement executed successfully. |
+----------------------------------+
변수 값을 반환합니다.
SELECT GETVARIABLE('var_artist_name');
이 예에서는 Snowflake가 변수를 모두 대문자로 저장하므로 출력은 NULL입니다.
대/소문자 표기를 다음과 같이 업데이트합니다.
SELECT GETVARIABLE('VAR_ARTIST_NAME');
+--------------------------------+
| GETVARIABLE('VAR_ARTIST_NAME') |
+--------------------------------+
| Jackson Browne |
+--------------------------------+
예를 들어 WHERE 절에 변수 이름을 사용할 수 있습니다.
SELECT album_title
FROM albums
WHERE artist = $var_artist_name;
변수 제거하기¶
SQL 변수는 세션에 대해 비공개입니다. Snowflake 세션이 닫히면 세션 중에 생성된 모든 변수가 삭제됩니다. 즉, 다른 세션에서 설정된 사용자 정의 변수에 누구도 접근할 수 없고, 세션이 닫히면 이러한 변수가 만료된다는 뜻입니다.
또한, 변수는 항상 UNSET 명령을 사용해 명시적으로 삭제할 수 있습니다.
예:
UNSET my_variable;