DB2_COMPATIBILITY_VECTOR 注册表变量

Db2® 产品提供了可选功能,可简化从其他关系数据库产品 (例如 Oracle, Sybase和 MySQL) 迁移应用程序的任务。 缺省情况下,这些功能处于不活动状态,但可以使用 DB2_COMPATIBILITY_VECTOR 注册表变量来激活这些功能的任何子集。

注册表变量设置

可以为 DB2_COMPATIBILITY_VECTOR 注册表变量设置下列值:
NULL
不激活任何兼容性功能。 这是缺省值。
00000000FFFFFFFF 之间的十六进制数字
表示二进制字符串的十六进制数字。 字符串中每个位的位置的值(0 或 1)指示对应兼容性功能部件是已启用 (1) 还是已禁用 (0)。 表 1 将每个位映射到它控制的功能部件。
ORA
此值可提高 Oracle 应用程序的兼容性。 它将激活 表 1的 ORA 列中存在项目符号的兼容性功能。 (有关 Oracle 兼容性功能的更多信息,请参阅 Oracle to DB2® Conversion Guide: Compatibility Made Easy。) 另外,它还会将 DB2_DEFERRED_PREPARE_SEMANTICS 注册表变量的缺省值更改为“YES”(在单字节字符集环境中)或“YES_DBCS_GRAPHIC_TO_CHAR”(在双字节字符集环境中)。
SYB
此值可提高 Sybase 应用程序的兼容性。 它将激活 表 1的 SYB 列中存在项目符号的兼容性功能。 另外,它还会将 DB2_DEFERRED_PREPARE_SEMANTICS 注册表变量的缺省值更改为“YES”。
MYS
此值可提高 MySQL 应用程序的兼容性。 它将 DB2_DEFERRED_PREPARE_SEMANTICS 注册表变量的缺省值更改为“YES”(在单字节字符集环境中)或“YES_DBCS_GRAPHIC_TO_CHAR”(在双字节字符集环境中)。

有关 DB2_DEFERRED_PREPARE_SEMANTICS 注册表变量的更多信息,请参阅 查询编译器变量

重要信息: 当您启用兼容性功能时,某些 SQL 行为将与 SQL 参考信息中记录的内容不同。 相应功能的文档中对这些行为差异进行了描述。
表 1. DB2_COMPATIBILITY_VECTOR 位位置
位位置 十六进制值 ORA SYB 兼容性功能 描述
1 0x01   ROWNUM 伪列 此位允许使用 ROWNUM 伪列作为 ROW_NUMBER() OVER() 函数的同义词,并允许 ROWNUM 伪列在 SQL 语句的 WHERE 子句中出现。
2 0x02   DUAL 表 此位将对 DUAL 表进行的未限定引用解析为 SYSIBM.DUAL。
3 0x04     (已废弃) 此位以前激活外连接运算符支持。 该功能现始终处于活动状态,现在将忽略此位。
4 0x08   分层查询 此位启用对使用 CONNECT BY 子句进行的分层查询的支持。
5 0x10   NUMBER 数据类型 1 此位启用对 NUMBER 数据类型和关联数字处理的支持。 创建启用了此支持的数据库之后,将 number_compat 数据库配置参数设置为 ON
6 0x20   VARCHAR2 数据类型 1 此位支持 VARCHAR2 和 NVARCHAR2 数据类型以及关联的字符串处理。 创建启用了此支持的数据库之后,将 varchar2_compat 数据库配置参数设置为 ON
7 0x40   DATE 数据类型 1 此位允许将 DATE 数据类型解释为 TIMESTAMP(0) 数据类型,以便它包含时间信息以及日期信息。 例如,在日期兼容性方式下,语句“VALUES CURRENT DATE”将返回类似于 2016-02-17-10.43.55 的值。 创建启用了此支持的数据库之后,将 date_compat 数据库配置参数设置为 ON
8 0x80   TRUNCATE 表 此位启用 TRUNCATE 语句的备用语义,以便 IMMEDIATE 是可选关键字并且是缺省关键字。 如果 TRUNCATE 语句不是逻辑工作单元中的第一个语句,那么在执行 TRUNCATE 语句之前,将执行隐式落实操作。
9 0x100 字符文字 此位支持将 CHAR 或 GRAPHIC 数据类型(而不是 VARCHAR 或 VARGRAPHIC 数据类型)指定给字符或图形字符串常量(其字节长度小于或等于 254)。
10 0x200   集合方法 此位允许使用方法对数组执行操作,例如 first、last、next 和 previous。 此值还允许在对数组中的特定元素的引用中使用圆括号来代替方括号。 例如,array1(i) 引用 array1 的元素 i
11 0x400   Oracle 数据字典兼容视图 1 此位允许创建与 Oracle 数据字典兼容的视图。
12 0x800   PL/SQL 编译 2 此位允许编译和执行 PL/SQL 语句和语言元素。
13 0x1000   不敏感游标 此位允许在 SELECT 语句未显式指定 FOR UPDATE 的情况下,使定义为 WITH RETURN 的游标不敏感。
14 0x2000   INOUT 参数 此位允许对 INOUT 参数声明指定 DEFAULT。
15 0x4000     (已废弃) 此位以前激活 LIMIT 和 OFFSET 支持,但该功能现始终处于活动状态,因此现在将忽略此位。
16 0x8000     (保留) 当前未使用此位。
17 0x10000   SQL 数据-访问级别实施 此位允许例程强制在运行时实施 SQL 数据访问级别。
18 0x20000   Oracle 数据库链接语法 此位启用 Oracle 数据库链接语法以访问其他数据库中的对象。
19 0x40000   同义词用法 此位禁止在一些 SQL 语句中使用同义词。 将 DB2_COMPATIBILITY_VECTOR 注册表变量设置为限制同义词的使用时,无法在将表同义词作为目标的情况下,发出 alter、drop、rename 或 truncate 语句。 无法在将视图同义词作为目标的情况下,发出 alter 或 drop 语句。 无法在将序列同义词作为目标的情况下,发出 alter 或 drop 语句。
  1. 此功能仅在创建数据库时适用。 启用或禁用此功能不会影响现有数据库,而仅影响新创建的数据库。
  2. 请参阅 PL/SQL 支持限制

用法

您可以使用 db2set 命令来设置和更新 DB2_COMPATIBILITY_VECTOR 注册表变量。 您可以通过添加与兼容性功能关联的十六进制值的数字,使用兼容性功能组合设置 DB2_COMPATIBILITY_VECTOR 注册表变量。 注册表变量的新设置直到您停止然后重新启动实例后才会生效。 而且,必须重新绑定 DB2 程序包,更改才能生效。 您未显式重新绑定的程序包将在下一次隐式重新绑定时实现更改。

示例 1

要设置该注册表变量以启用所有受支持的 Oracle 兼容性功能,请使用以下命令:
db2set DB2_COMPATIBILITY_VECTOR=ORA
db2stop
db2start

示例 2

要设置该注册表变量以提供上表中指定的 ROWNUM 伪列 (0x01) 和 DUAL 表 (0x02) 支持,请使用以下命令:
db2set DB2_COMPATIBILITY_VECTOR=03
db2stop
db2start

示例 3

要通过重置 DB2_COMPATIBILITY_VECTOR 注册表变量来禁用所有兼容性功能,请使用以下命令:
db2set DB2_COMPATIBILITY_VECTOR=
db2stop
db2start