SET SCHEMA 语句

SET SCHEMA语句为CURRENT SCHEMA特殊寄存器赋值。 如果包与DYNAMICRULES BIND选项绑定,则此语句不影响用于非限定数据库对象引用的限定符。

调用 SET SCHEMA

此语句可嵌入应用程序中或者以交互方式发出。 它是可动态准备的可执行语句。

授权 SET SCHEMA

不需要执行任何操作。

语法 SET SCHEMA

阅读语法图跳过可视化语法图 SET CURRENTSCHEMACURRENT_SCHEMA = 模式名称SESSION_USERUSER宿主变量常量字符串DEFAULT

描述 SET SCHEMA

schema-name
标识模式。 在设置当前架构时,不验证架构是否存在。 例如,如果一个模式名称拼写错误,可能会影响后续SQL的运行方式。
SESSION_USER USER
指定 SESSION_USER(USER)特殊寄存器的值。
主机变量
指定一个包含模式名称的主变量。 内容不会自动变为大写。

主机变量必须:

  • 可以是CHAR、VARCHAR、GRAPHIC或VARGRAPHIC变量。 宿主变量内容的实际长度不得超过模式名称的长度。
  • 不能设置为空。 如果宿主变量有一个相关的指示变量,则该指示变量的值不能为空。
  • 包含一个左对齐的架构名称,该名称符合普通标识符或分隔标识符的规则。 如果标识符是定界符,则不能为空或仅包含空格。
  • 如果宿主变量是固定长度的,则在右侧用空格填充。
  • 不包含 SESSION_USER、USER 或 DEFAULT。
字符串常量
指定一个包含模式名称的字符串常量。 内容不会自动变为大写。

该字符串常量必须:

  • 长度不得超过模式名称的最大长度。
  • 包含一个左对齐的架构名称,该名称符合普通标识符或分隔标识符的规则。 如果标识符是定界符,则不能为空或仅包含空格。
  • 不包含 SESSION_USER、USER 或 DEFAULT。
缺省值
指定将当前模式设置为初始值,就像在应用过程中从未明确设置过一样。 有关当前方案初始值的信息,请参阅当前方案特殊登记册

备注 SET SCHEMA

关键词注意事项:
将单个关键字(如SESSION_USER或DEFAULT)指定为单个关键字或分隔标识符是有区别的。 为了表示应该使用 SESSION_USER 特殊寄存器的当前值来设置当前模式,请将 SESSION_USER 指定为关键字。 为了表示特殊寄存器应设置为默认值,请指定 DEFAULT 作为关键字。 如果将 SESSION_USER 或 DEFAULT 指定为分隔标识符(例如“SESSION_USER”),则将其解释为该值的架构名称(“SESSION_USER”)。
交易注意事项:
SET SCHEMA语句不是可提交操作。 ROLLBACK对CURRENT SCHEMA没有影响。
指定值的使用:
当前模式特殊寄存器的值(由该语句设置)在所有动态SQL语句中用作模式名称。 限定符绑定选项指定了模式名称,用于在静态SQL语句中作为非限定数据库对象名称的限定符。
对其他特殊登记的影响:
设置当前模式特殊寄存器不会影响任何其他特殊寄存器。 因此,当前模式不会包含在SQL路径中,该路径用于解析动态SQL语句中对函数、过程和用户定义类型的非限定引用。 为了在SQL路径中包含当前模式值,每当发出SET SCHEMA语句时,也要发出SET PATH语句,其中包含SET SCHEMA语句中的模式名称。

例子 SET SCHEMA

示例1 :以下语句用于设置当前模式特殊寄存器。
   EXEC SQL SET SCHEMA RICK;
示例2: 以下示例将当前模式特殊寄存器的当前值检索到名为CURSCHEMA的主变量中。
   EXEC SQL SELECT CURRENT SCHEMA INTO :CURSCHEMA
      FROM SYSIBM.SYSDUMMY1;
主变量值为RICK。
例3: 假设以下语句已发出:
SET CURRENT SQLID = 'USRT001';
SET CURRENT SCHEMA = 'USRT002';
此时,两个特殊寄存器中的值不同。 任何后续的CREATE语句都将使用 USRT002 作为隐式限定符,但新创建对象的所有者是 USRT001。
示例 4: 假设 CURRENT SCHEMA 的值为“Jane”,并且使用该值建立了 PATH 特殊寄存器的默认值(即 PATH 的值为 “SYSIBM”、“SYSFUN”、“SYSPROC”、“SYSIBMADM ”、“JANE”)。 将当前模式特殊寄存器的值更改为“John”。
   SET CURRENT SCHEMA = 'JOHN';
要更改SQL路径以使用更新的当前模式值“JOHN”,请发出SET PATH语句以更改PATH特殊寄存器的值,将“JOHN”指定为要检查的第一个模式:
SET PATH = 'JOHN', CURRENT PATH;
或者,提交会导致重新初始化 PATH。 否则,路径将保留为 “SYSIBM”、“SYSFUN”、“SYSPROC”、“SYSIBMADM ”、“JANE”),这可能会导致不合格的对象名称解析为“JANE”,而您希望它们解析为“JOHN”。