테이블 리터럴

테이블 리터럴은 테이블 이름이나 (테이블 이름을 대신하는) 자리 표시자 값을 쿼리에 전달하는 데 사용됩니다. 테이블 리터럴은 SQL 문의 FROM 절에 나타나며 테이블 이름 또는 테이블 이름 대신 SQL 변수나 API 바인드 변수로 구성됩니다.

약식으로 TABLE(...) 을 사용해 테이블 리터럴을 생성할 때 TABLE()테이블 함수 처럼 생각할 수 있습니다. 구문상으로 TABLE() 은 함수처럼 보입니다. TABLE() 은 의미상으로는 테이블 함수와 유사하게 동작하는데, 그 이유는 이것이 다음과 같은 특징을 띠기 때문입니다.

  • 스칼라 값을 입력값으로 받아들입니다.

  • 0개 또는 그 이상의 행으로 구성된 세트를 반환합니다.

  • FROM 절에서 행의 원본으로 사용할 수 있습니다.

이 항목의 내용:

구문

TABLE( { <string_literal> | <session_variable> | <bind_variable> } )
Copy
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$$);
Copy

테이블 리터럴을 사용해 스키마 myschema 와 데이터베이스 mydb 에서 테이블 mytable 을 쿼리합니다(다음 두 예는 구문적으로 같음).

SELECT * FROM TABLE('mydb."myschema"."mytable"');

SELECT * FROM TABLE($$mydb."myschema"."mytable"$$);
Copy

테이블 이름을 참조하는 세션 변수를 설정한 다음, 테이블 리터럴로 전달된 변수를 사용해 테이블을 쿼리합니다.

SET myvar = 'mytable';

SELECT * FROM TABLE($myvar);
Copy

테이블을 나타내는 바인딩으로 문을 작성합니다(다음 두 예는 구문적으로 같음).

SELECT * FROM TABLE(?);

SELECT * FROM TABLE(:binding);
Copy