Snowflake의 세션에서 SQL 변수를 정의하고 사용할 수 있습니다.
변수 초기화하기
SQL 문 SET 를 실행하거나 Snowflake에 연결할 때 연결 문자열에 변수를 설정하여 변수를 설정할 수 있습니다.
문자열 또는 이진 변수의 크기는 256바이트로 제한됩니다.
SQL을 사용해 세션에서 변수 초기화하기
SET 명령을 사용하여 SQL에서 변수를 초기화할 수 있습니다. 변수의 데이터 타입은 평가된 식 결과의 데이터 타입에서 파생됩니다. 다음 예제에서는 변수를 초기화합니다.
SET my_variable1 = 10;
SET my_variable2 = 'example';
단일 결과를 반환하는 쿼리를 사용하여 변수를 초기화할 수 있습니다. 다음 예제에서는 쿼리를 사용하여 변수를 초기화합니다.
SET cust_last_name = (SELECT lname FROM customers WHERE customer_id=100);
SET timestamp_variable = (SELECT CURRENT_TIMESTAMP());
동일한 문에서 여러 변수를 초기화할 수 있으므로 서버와의 왕복 통신 횟수를 줄일 수 있습니다. 다음 예제에서는 여러 변수를 초기화합니다.
SET (var1, var2, var3) = (10, 20, 30);
SET (current_user, current_warehouse) = ((SELECT CURRENT_USER()), (SELECT CURRENT_WAREHOUSE()));
연결 시 변수 설정하기
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()`로 래핑해야 합니다(예: :code:`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() 에 대한 자세한 내용은 IDENTIFIER() 구문을 사용하는 식별자로서의 리터럴과 변수 를 참조하십시오.
세션에 대한 변수 보기
현재 세션에 정의된 모든 변수를 보려면 SHOW VARIABLES 명령을 사용하십시오.
+----------------------------------+
| status |
|----------------------------------|
| Statement executed successfully. |
+----------------------------------+
+----------------+-------------------------------+-------------------------------+------+-------+-------+---------+
| 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;