DB2_COMPATIBILITY_VECTOR 注册表变量启用一个或多个 DB2® 兼容性功能。这些功能使您可轻松完成将为 DB2 产品之外的关系数据库产品编写的应用程序迁移至 DB2 产品的任务。
注册表变量设置
值如下所示:
- NULL(缺省值)。这表示不支持兼容性功能。
- 0000 - FFFF 的十六进制值。 变量值中的每一位启用单独的兼容性功能。针对每个位的含义,请参见表 1。
- ORA。此值相当于十六进制值 70FFF,可为 Oracle 应用程序启用所有 DB2 兼容性功能。
- SYB。此值相当于十六进制值 3004,可为 Sybase 应用程序启用所有 DB2 兼容性功能。
- MYS。此值相当于十六进制值 4000,可为 MySQL 应用程序启用所有 DB2 兼容性功能。当前,唯一受支持的 MySQL 兼容性功能是启用 LIMIT 和 OFFSET 子句。
设置 ORA、SYB 或 MYS 可启用所有兼容性功能。
要点:仅当需要将这些功能用于特定兼容性用途时,才启用兼容性功能。如果启用 DB2 兼容性功能,那么 SQL 引用信息中描述的一些 SQL 行为会更改。要确定 SQL 应用程序的兼容性功能的潜在作用,请参阅与该兼容性功能相关联的文档。
下表指定启用各个兼容功能所需的设置。
位位置(十六进制值) | 兼容性功能 | 描述 |
---|---|---|
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”返回 2011-02-17-10.43.55 之类的值。创建启用了此支持的数据库之后,将 date_compat 数据库配置参数设置为 ON。 |
8 (0x80) | TRUNCATE TABLE | 启用 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 子句 | 支持在全查询、UPDATE 和 DELETE 语句中使用与 MySQL 兼容和与 PostgreSQL 兼容的 LIMIT 和 OFFSET 子句。 |
17 (0x10000) | SQL 数据访问级别强制 | 允许例程强制在运行时实施 SQL 数据访问级别。 |
18 (0x20000) | Oracle 数据库链接语法 | 启用 Oracle 数据库链接语法可访问其他数据库中的对象。 |
19 (0x40000) | 同义词使用 | 禁止在一些 SQL 语句中使用同义词。将 DB2_COMPATIBILITY_VECTOR 注册表变量设置为限制同义词的使用时,无法在将表同义词作为目标的情况下,发出 alter、drop、rename 或 truncate 语句。 无法在将视图同义词作为目标的情况下,发出 alter 或 drop 语句。无法在将序列同义词作为目标的情况下,发出 alter 或 drop 语句。 |
|
用法
请使用 db2set 命令来设置和更新 DB2_COMPATIBILITY_VECTOR 注册表变量。您可以通过添加与兼容性功能关联的十六进制值的数字,使用兼容性功能组合设置 DB2_COMPATIBILITY_VECTOR 注册表变量。注册表变量的新设置直到您停止然后重新启动实例后才会生效。而且,必须重新绑定 DB2 程序包,更改才能生效。您未显式重新绑定的程序包将在下一次隐式重新绑定时实现更改。
如果设置 DB2_COMPATIBILITY_VECTOR 注册表变量,请创建数据库作为 Unicode 数据库。
示例 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
如果在启用下列任何功能后创建数据库,然后禁用所有兼容性功能,那么仍会针对此数据库启用这些功能:
- NUMBER 数据类型
- VARCHAR2 数据类型
- 将 DATE 数据类型作为 TIMESTAMP(0)
- 创建与 Oracle 数据字典兼容的视图