- 카테고리:
TO_QUERY¶
SQL 텍스트를 기반으로 한 결과 세트와 SQL 텍스트가 매개 변수화된 경우에는 텍스트에 전달되는 선택적 인자 세트를 반환합니다. 이 함수는 SQL 텍스트를 FROM 절의 하위 쿼리 정의로 컴파일합니다. 애플리케이션이나 저장 프로시저를 작성할 때 이 함수를 호출하여 SQL 문을 구성할 수 있습니다.
참고
이 함수는 쿼리 문에 사용자 입력을 포함할 수 있으며, 그에 따라 SQL 주입과 같은 잠재적인 보안 위험이 있습니다. 외부 소스에서 함수에 대한 입력이 이루어지는 경우, 입력 데이터가 검증되었는지 확인하십시오. 자세한 내용은 SQL 주입 섹션을 참조하십시오.
- 참고 항목:
구문¶
TO_QUERY( SQL => '<string>' [ , <arg> => '<value>' [, <arg> => '<value>' ...] ] )
인자¶
필수 사항
SQL => 'string'
하위 쿼리의 문자열 표현.
선택 사항
arg => 'value'
SQL
string
에 전달된 바인드 변수.
반환¶
지정된 SQL 텍스트 또는 NULL을 실행하여 생성된 결과 세트를 반환합니다. 어느 한 인자라도 NULL이면 함수는 오류를 보고하지 않고 NULL을 반환합니다.
사용법 노트¶
모든 인자는 다음 중 하나여야 합니다.
상수 문자열.
SQL 변수 또는 문자열로 확인되는 Snowflake Scripting 변수.
인자로 전달된 문자열을 다른 데이터 타입으로 변환해야 하는 경우 SQL
string
에서 변환 함수 를 사용하여 문자열을 다른 데이터 타입으로 변환할 수 있습니다.결과 세트를 정의하는 열 세트는 컴파일된 SQL 문의 SELECT 목록에서 파생됩니다.
이 함수는 SQL 문의 FROM 절에서만 유효합니다.
예¶
테이블을 만들고 그 테이블에 데이터를 삽입합니다.
CREATE OR REPLACE TABLE to_query_example (
deptno NUMBER(2),
dname VARCHAR(14),
loc VARCHAR(13))
AS SELECT
column1,
column2,
column3
FROM
VALUES
(10, 'ACCOUNTING', 'NEW YORK'),
(20, 'RESEARCH', 'DALLAS' ),
(30, 'SALES', 'CHICAGO' ),
(40, 'OPERATIONS', 'BOSTON' );
예에서는 이 테이블의 데이터를 사용합니다.
SQL 문에서 TO_QUERY 사용하기¶
먼저, 테이블 이름에 대한 세션 변수(SQL 변수)를 설정합니다.
SET table_name = 'to_query_example';
예에서는 세션 변수와 IDENTIFIER() 를 사용하여 테이블을 식별합니다.
IDENTIFIER()를 사용하여 데이터베이스 오브젝트를 식별하는 것이 모범 사례인데, 코드의 재사용성을 높이고 SQL 주입 위험을 방지하는 데 도움이 될 수 있기 때문입니다.
다음 예에서는 TO_QUERY 함수를 사용하여 to_query_example
테이블의 모든 데이터를 반환합니다.
SELECT * FROM TABLE(TO_QUERY('SELECT * FROM IDENTIFIER($table_name)'));
+--------+------------+----------+
| DEPTNO | DNAME | LOC |
|--------+------------+----------|
| 10 | ACCOUNTING | NEW YORK |
| 20 | RESEARCH | DALLAS |
| 30 | SALES | CHICAGO |
| 40 | OPERATIONS | BOSTON |
+--------+------------+----------+
다음 예에서는 TO_QUERY 함수를 사용하여 to_query_example
테이블의 deptno
열에 있는 모든 값을 반환합니다.
SELECT deptno FROM TABLE(TO_QUERY('SELECT * FROM IDENTIFIER($table_name)'));
+--------+
| DEPTNO |
|--------|
| 10 |
| 20 |
| 30 |
| 40 |
+--------+
다음 예에서는 TO_QUERY 함수를 사용하여 SQL 문에 인자를 전달하여 to_query_example
테이블에서 deptno
가 10
과 같은 행을 반환합니다.
SELECT * FROM TABLE(
TO_QUERY(
'SELECT * FROM IDENTIFIER($table_name)
WHERE deptno = TO_NUMBER(:dno)', dno => '10'
)
);
+--------+------------+----------+
| DEPTNO | DNAME | LOC |
|--------+------------+----------|
| 10 | ACCOUNTING | NEW YORK |
+--------+------------+----------+
다음 예는 이전 예와 동일하지만, 세션 변수를 사용하여 deptno
값을 TO_QUERY 함수에 전달합니다.
SET dept = '10';
SELECT * FROM TABLE(
TO_QUERY(
'SELECT * FROM IDENTIFIER($table_name)
WHERE deptno = TO_NUMBER(:dno)', dno => $dept
)
);
+--------+------------+----------+
| DEPTNO | DNAME | LOC |
|--------+------------+----------|
| 10 | ACCOUNTING | NEW YORK |
+--------+------------+----------+
다음 예에서는 TO_QUERY 함수를 사용하여 SQL 문에 2개의 인자를 전달하여 to_query_example
테이블에서 deptno
가 10
과 같거나 dname
이 SALES
와 같은 행을 반환합니다.
SELECT * FROM TABLE(
TO_QUERY(
'SELECT * FROM IDENTIFIER($table_name)
WHERE deptno = TO_NUMBER(:dno) OR dname = :dnm',
dno => '10', dnm => 'SALES'
)
);
+--------+------------+----------+
| DEPTNO | DNAME | LOC |
|--------+------------+----------|
| 10 | ACCOUNTING | NEW YORK |
| 30 | SALES | CHICAGO |
+--------+------------+----------+
저장 프로시저에서 TO_QUERY 사용하기¶
다음 예제에서는 저장 프로시저에서 TO_QUERY 함수를 사용합니다.
CREATE OR REPLACE PROCEDURE get_num_results_tq(query VARCHAR)
RETURNS TABLE ()
LANGUAGE SQL
AS
DECLARE
res RESULTSET DEFAULT (SELECT COUNT(*) FROM TABLE(TO_QUERY(:query)));
BEGIN
RETURN TABLE(res);
END;
참고: Python Connector 코드에서 SnowSQL, Classic Console 또는 execute_stream
또는 execute_string
메서드를 사용하는 경우 이 예제를 대신 사용하십시오(SnowSQL, Classic Console 및 Python Connector에서 Snowflake Scripting 사용하기 참조).
CREATE OR REPLACE PROCEDURE get_num_results_tq(query VARCHAR)
RETURNS TABLE ()
LANGUAGE SQL
AS
$$
DECLARE
res RESULTSET DEFAULT (SELECT COUNT(*) FROM TABLE(TO_QUERY(:query)));
BEGIN
RETURN TABLE(res);
END;
$$
;
저장 프로시저를 호출합니다.
CALL get_num_results_tq('SELECT * FROM to_query_example');
+----------+
| COUNT(*) |
|----------|
| 4 |
+----------+
CALL get_num_results_tq('SELECT * FROM to_query_example WHERE deptno = 20');
+----------+
| COUNT(*) |
|----------|
| 1 |
+----------+
다음 예에서는 바인드 변수가 있는 저장 프로시저에서 TO_QUERY 함수를 사용합니다.
CREATE OR REPLACE PROCEDURE get_results_tqbnd(dno VARCHAR)
RETURNS TABLE ()
LANGUAGE SQL
AS
DECLARE
res RESULTSET DEFAULT (SELECT * FROM TABLE(
TO_QUERY(
'SELECT * FROM to_query_example
WHERE deptno = TO_NUMBER(:dnoval)', dnoval => :dno
)
));
BEGIN
RETURN TABLE(res);
END;
참고: Python Connector 코드에서 SnowSQL, Classic Console 또는 execute_stream
또는 execute_string
메서드를 사용하는 경우 이 예제를 대신 사용하십시오(SnowSQL, Classic Console 및 Python Connector에서 Snowflake Scripting 사용하기 참조).
CREATE OR REPLACE PROCEDURE get_results_tqbnd(dno VARCHAR)
RETURNS TABLE ()
LANGUAGE SQL
AS
$$
DECLARE
res RESULTSET DEFAULT (SELECT * FROM TABLE(
TO_QUERY(
'SELECT * FROM to_query_example
WHERE deptno = TO_NUMBER(:dnoval)', dnoval => :dno
)
));
BEGIN
RETURN TABLE(res);
END;
$$
;
저장 프로시저를 호출합니다.
CALL get_results_tqbnd('40');
+--------+------------+--------+
| DEPTNO | DNAME | LOC |
|--------+------------+--------|
| 40 | OPERATIONS | BOSTON |
+--------+------------+--------+
세션 변수를 사용하여 저장 프로시저를 호출합니다.
SET dept = '20';
CALL get_results_tqbnd($dept);
+--------+----------+--------+
| DEPTNO | DNAME | LOC |
|--------+----------+--------|
| 20 | RESEARCH | DALLAS |
+--------+----------+--------+