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)
). 아래에 몇 가지 예가 나와 있습니다.
CREATE TABLE IDENTIFIER($MY_TABLE_NAME) (i INTEGER); INSERT INTO IDENTIFIER($MY_TABLE_NAME) (i) VALUES (42);SELECT * FROM IDENTIFIER($MY_TABLE_NAME);DROP TABLE IDENTIFIER($MY_TABLE_NAME);
FROM 절의 컨텍스트에서 아래에 표시된 것처럼 변수 이름을 TABLE()
에 래핑할 수 있습니다.
SELECT * FROM TABLE($MY_TABLE_NAME); +----+ | I | |----| | 42 | +----+
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 | | +-------------+---------------------------------+---------------------------------+------+-------+-------+---------+
세션 변수 함수¶
다른 데이터베이스 시스템과의 호환성을 지원하고 변수 액세스를 위한 $
구문을 지원하지 않는 도구를 통해 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;