테이블 리터럴¶
테이블 리터럴은 테이블 이름이나 (테이블 이름을 대신하는) 자리 표시자 값을 쿼리에 전달하는 데 사용됩니다. 테이블 리터럴은 SQL 문의 FROM 절에 나타나며 테이블 이름 또는 테이블 이름 대신 SQL 변수나 API 바인드 변수로 구성됩니다.
약식으로 TABLE(...)
을 사용해 테이블 리터럴을 생성할 때 TABLE()
을 테이블 함수 처럼 생각할 수 있습니다. 구문상으로 TABLE()
은 함수처럼 보입니다. TABLE()
은 의미상으로는 테이블 함수와 유사하게 동작하는데, 그 이유는 이것이 다음과 같은 특징을 띠기 때문입니다.
스칼라 값을 입력값으로 받아들입니다.
0개 또는 그 이상의 행으로 구성된 세트를 반환합니다.
FROM 절에서 행의 원본으로 사용할 수 있습니다.
이 항목의 내용:
구문¶
TABLE( { <string_literal> | <session_variable> | <bind_variable> } )
string_literal
테이블의 식별자 를 포함하는 문자열 리터럴:
식별자를 다음과 같은 형식으로 정규화될 수 있습니다.
db_name.schema_name.table_name
schema_name.table_name
대/소문자를 구분하거나 공백과 특수 문자를 포함하는 개별 오브젝트 식별자에 큰따옴표가 지원됩니다.
전체 식별자 문자열은 작은따옴표 또는
$$
로 묶어야 합니다. 예:'mytable'
또는$$mytable$$
'mydb.myschema.mytable'
또는$$mydb.myschema.mytable$$
'"DB 1"."Schema 1".mytable'
또는$$"DB 1"."Schema 1".mytable$$
session_variable
세션에 대해 설정된 SQL 변수 입니다.
bind_variable
바인딩을 지원하는 APIs(Java, Python 등)와 함께 사용하기 위한
?
또는:name
의 표준 형식으로 제공되는 바인드 변수.
사용법 노트¶
테이블 리터럴은 FROM 절에서만 지원됩니다.
TABLE()
이 지원되는 경우 이는 IDENTIFIER() 를 사용하는 것과 같습니다.바인드 변수를 사용해 문을 작성할 때 문을 작성한 후에는 테이블 메타데이터를 사용할 수 없습니다.
예¶
테이블 리터럴을 사용해 테이블 mytable
을 쿼리합니다(다음 두 예는 구문적으로 같음).
SELECT * FROM TABLE('mytable'); SELECT * FROM TABLE($$mytable$$);
테이블 리터럴을 사용해 스키마 myschema
와 데이터베이스 mydb
에서 테이블 mytable
을 쿼리합니다(다음 두 예는 구문적으로 같음).
SELECT * FROM TABLE('mydb."myschema"."mytable"'); SELECT * FROM TABLE($$mydb."myschema"."mytable"$$);
테이블 이름을 참조하는 세션 변수를 설정한 다음, 테이블 리터럴로 전달된 변수를 사용해 테이블을 쿼리합니다.
SET myvar = 'mytable'; SELECT * FROM TABLE($myvar);
테이블을 나타내는 바인딩으로 문을 작성합니다(다음 두 예는 구문적으로 같음).
SELECT * FROM TABLE(?); SELECT * FROM TABLE(:binding);