USE SCHEMA¶
指定会话的活动/当前架构:
如果在会话中没有指定数据库,则在会话中执行的查询和其他 SQL 语句引用的任何对象都必须完全限定于对象的数据库和架构,也称为 *命名空间*(格式为
db_name.schema_name.object_name
)。有关完全限定对象名称的更多信息,请参阅 对象名称解析。如果在会话中指定了数据库但没有指定架构,则在会话中执行的查询和其他 SQL 语句引用的任何对象都必须限定于对象的架构(格式为
schema_name.object_name
)。如果为用户会话指定了数据库和架构,则允许在 SQL 语句和查询中使用不合格的对象名称。
语法¶
USE [ SCHEMA ] [<db_name>.]<name>
参数¶
[db_name.]name
指定要用于会话的架构的标识符。如果标识符包含空格或特殊字符,则整个字符串必须放在双引号内。放在双引号内的标识符也区分大小写。
如果架构名称是完全限定的(格式为
db_name.schema_name
),则 SCHEMA 关键字是可选的。如果在用户会话指定了数据库且包含 SCHEMA 关键字,则数据库名称 (
db_name
) 为可选。
示例¶
使用用户会话中指定的数据库 myschema
架构:
USE SCHEMA myschema;
使用 mydb
数据库中的 myschema
架构:
USE mydb.myschema;
以下示例展示了在切换架构的 USE 命令后,使用非限定名称引用对象的命令如何产生不同的输出结果。不同架构中的表、表数据、视图、用户定义的函数等可能各不相同。
当在 ``schema_one`` 的上下文中执行 SHOW TABLES 命令时,输出的结果会反映该架构中的对象。
USE SCHEMA schema_one;
SHOW TABLES ->> SELECT "created_on", "name" FROM $1 ORDER BY "created_on";
+-------------------------------+-----------+
| created_on | name |
|-------------------------------+-----------|
| 2025-07-13 23:48:49.129 -0700 | TABLE_ABC |
| 2025-07-13 23:49:50.329 -0700 | TABLE_DEF |
+-------------------------------+-----------+
执行 USE 命令切换到 ``schema_two`` 架构后,SHOW TABLES 命令输出的对象集合会发生变化:
USE SCHEMA schema_two;
SHOW TABLES ->> SELECT "created_on", "name" FROM $1 ORDER BY "created_on";
+-------------------------------+-----------+
| created_on | name |
|-------------------------------+-----------|
| 2025-07-13 23:52:06.144 -0700 | TABLE_IJK |
| 2025-07-13 23:53:29.851 -0700 | TABLE_XYZ |
+-------------------------------+-----------+
以下示例从一种架构更改为另一种架构,然后变回原始架构。原始架构的名称存储在变量中。请运行以下命令:
SELECT CURRENT_SCHEMA();
SET original_schema = (SELECT CURRENT_SCHEMA());
USE SCHEMA schema_two;
SELECT CURRENT_SCHEMA();
USE SCHEMA IDENTIFIER($original_schema);
SELECT CURRENT_SCHEMA();
这些命令的输出显示了当前架构值的变化:
>SELECT CURRENT_SCHEMA();
+------------+
| SCHEMA_ONE |
+------------+
>SET original_schema = (SELECT CURRENT_SCHEMA());
>USE SCHEMA schema_two;
>SELECT CURRENT_SCHEMA();
+------------+
| SCHEMA_TWO |
+------------+
>USE SCHEMA IDENTIFIER($original_schema);
>SELECT CURRENT_SCHEMA();
+------------+
| SCHEMA_ONE |
+------------+