数据库对象中的缩写年份和表达式

当数据库对象中的表达式(包括检查约束、分段存储表达式、SPL 例程、触发器或 UDR)包含年份为 1 位或 2 位数字的字面日期值或 DATETIME 值时,数据库服务器将使用在创建(或上次修改)数据库对象时 DBCENTURY(和其他相关环境变量)所具有的设置对表达式求值。

如果 DBCENTURY 已重新设置为新值,那么在展开缩写年份时会忽略新值。

例如:假定用户创建了一个表并对名为 birthdate 的列定义以下检查约束:
birthdate < '09/25/50'

表达式是根据定义约束时的 DBCENTURY 值解释的。如果包含 birthdate 列的表是在 09/23/2000 创建的且 DBCENTURY =C,那么在对 birthdate 列执行插入或更新操作时检查约束表达式始终解释为 birthdate < '09/25/1950'。即使用户对 birthdate 列执行插入或更新操作时对 DBCENTURY 设置了不同的值,约束表达式仍然根据定义(或上次修改)检查约束时的设置进行解释。

在一些较早版本的 GBase 8s 上创建的数据库对象不支持创建时设置的优先级。

对于要获取此功能的旧对象

  1. 删除这些对象。
  2. 重新创建这些对象(或对于分段存储表达式,拆离这些对象然后重新连接)。

重新定义这些对象之后,对象的表达式内的日期文字将根据创建或上次修改对象时的环境进行解释。否则,它们的行为将取决于运行时环境,如果环境更改,行为有可能变得不一致。

同时包含旧对象和新对象的数据库的管理可能会很复杂,这是因为对日期表达式求值的新旧行为之间存在差异。为避免这一情况,建议重新定义所有旧对象。

DBCENTURY 的值和当前日期并非确定数据库服务器解释 date 和 DATETIME 值的方式的唯一因子。DBDATEDBTIMEGL_DATEGL_DATETIME 环境变量也能够影响解释日期的方式。有关 GL_DATEGL_DATETIME 的信息,请参阅《GBase 8s GLS 用户指南》。
重要: GBase 8sDBCENTURY 的行为与先前版本不兼容。