表字面量¶
表字面量用于将表的名称或占位符的值(而不是表名称)传递给查询。表字面量出现在 SQL 语句的 FROM 子句中,由表名称或代替表名称的 SQL 变量或 API 绑定变量组成。
通俗地讲,使用 TABLE(...) 构造表字面量时,可以将 TABLE() 视为 表函数。从语法上讲,TABLE() 就像一个函数。从语义上讲,TABLE() 的行为类似于表函数,因为它:
接受标量值作为输入。
返回一组 0 或更多行。
可以用作 FROM 子句中的行源。
本主题内容:
语法¶
TABLE( { <string_literal> | <session_variable> | <bind_variable> } )
string_literal包含表 标识符 的字符串字面量:
标识符可以完全限定为以下形式:
db_name.schema_name.table_nameschema_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);