现行规则 特别登记

CURRENT RULES(当前规则)指定SQL语句是按照 Db2 规则还是SQL标准规则执行。

登记的数据类型为CHAR(3),唯一有效的值为“ DB2 '和'STD'。

CURRENT RULES是数据库服务器上的一个注册。 如果服务器不是本地的 Db2 ,则寄存器的初始值为“ DB2 '。 否则,初始值与SQLRULES绑定选项的值相同。 用户定义的函数或存储过程中的当前规则的初始值根据用户定义的函数或存储过程中的特殊寄存器中的规则进行继承。

您可以通过执行语句SET CURRENT RULES来更改寄存器的值。

CURRENT RULES 影响下表所列的语句,该表总结了哪些语句受到影响,并显示了更多信息的来源。

表 1. 受现行规则影响的语句汇总
语句 什么受到影响
所有语句
SQL错误代码 Db2 是指任何引用不存在的对象名称的SQL语句。
  • CURRENT RULES 值为 'DB2' 时, Db2 会发出存在错误,例如 SQLCODE -204 ,表示对象不存在。
  • CURRENT RULES 值为 'STD' 时, Db2 会发出授权错误,例如 SQLCODE -551 ,表示对象不存在。
ALTER TABLE 以下行为:
  • 添加了检查约束的强制执行。
  • 参照约束的删除规则默认值。
  • Db2 是否为添加的LOB列创建LOB表空间、辅助表和辅助表索引。 参见 LOB表空间隐式创建
  • Db2 是否为添加的ROWID列创建索引,该列由GENERATED BY DEFAULT定义。
CREATE TABLE 以下行为:
  • 参照约束的删除规则默认值。
  • 如果表是明确创建的,则 Db2 是否为LOB列创建LOB表空间、辅助表和辅助表索引。 参见 LOB表空间隐式创建
  • 如果表是显式创建的,则 Db2 是否为定义为GENERATED BY DEFAULT的ROWID列创建索引。
GRANT 给自己特权。
REVOKE 撤销授权ID的特权。
设置当前规则,以便后续的ALTER TABLE语句能够按照SQL标准规则执行:
  SET CURRENT RULES = 'STD';