表字面量¶
表字面量用于将表的名称或占位符的值(而不是表名称)传递给查询。表字面量出现在 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
绑定变量,标准形式为
?
或:name
,用于支持绑定(Java、Python 等)的 APIs。
使用说明¶
表字面量仅在 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);