IBM DB2 自从 v9.7版本引入“兼容特性”以来,经过 10.1、10.5等版本的不断改进,还是进行了些变化,现在把 v11.1版本兼容特性的一些学习笔记分享给大家学习,后续会更新 v11.5的相关内容。
与其他数据库技术不同的是,DB2 可以运行在其他数据库技术中开发的应用程序,并且改动很小。
DB2 注册表变量 DB2_COMPAT_VECTOR 用于激活这种兼容性。
下面是 DB2_COMPAT_VECTOR 支持的其他数据库列表:
例如,要为Oracle设置兼容性,请使用 db2set命令如下:
db2set DB2_COMPAT_VECTOR=ORA
db2stop
db2start
当 DB2_COMPAT_VECTOR=ORA 被设置时,NUMBER、VARCHAR2 和 DATE Oracle数据类型将与 DB2 兼容。
一些兼容性特性 总是激活 的。
序列引用方法:
可使用 seqname.NEXTVAL 来替换 SQL 标准语法 NEXT VALUE FOR seqname。还可使用 seqname.CURRVAL 来替换 SQL 标准语法 PREVIOUS VALUE FOR seqname。
同义词:
例如,DISTINCT 可替换为 UNIQUE 的,而 MINUS 可以替换 EXCEPT。大多数自动活动的特性提供了 DB2 和 PostgreSQL 或 Netezza之间的应用程序可移植性桥梁。
伪列 ROWID,可用于引用 RID。未限定 ROWID 引用等价于 RID_BIT(),限定 ROWID 引用(例如,EMPLOYEE.ROWID)等价于 RID_BIT(EMPLOYEE)。
DB2 11.1 提供了一些特性,使为 Netezza Platform Software(NPS)数据库编写的应用程序能够使用 DB2数据库,而无需重写。
某些 NPS 兼容性功能(例如, “等同的数据类型名称” 和 DATASLICEID 伪列 )始终处于活动状态。
要激活完全成熟的NPS兼容性特性,包括可选特性,请将 SQL_COMPAT 全局变量设置为 NPS:
SET SQL_COMPAT='NPS'
NPS 可选兼容性
下面分别详细说明 Netezza的可选兼容性特性:
双点表示法
在 NPS 兼容性方式下操作时,可以使用双点表示法来指定数据库对象。
格式: ..,NPS 说明: .。
TRANSLATE 标量函数语法
TRANSLATE 标量函数的语法取决于是否在使用 NPS 兼容性方式。
如果设置了 SQL_COMPAT='NPS',那么 TRANSLATE 标量函数的语法为:
TRANSLATE--(--char-string-exp--,--from-string-exp--,--to-string-exp--)-><
示例:translate('12345','143', 'ax') ,结果: a2x5
如果未启用 NPS兼容性,那么 TRANSLATE 标量函数的语法为:
TRANSLATE--(--char-string-exp-----,--to-string-exp--,--from-string-exp----)-><
运算符
在表达式中使用哪些符号表示运算符取决于是否使用了 NPS 兼容性方式。
根据 SELECT 子句列进行分组
在 NPS 兼容性方式下操作时,可以在对查询结果进行分组时指定 SELECT 子句列的 “顺序位置” 或 “显示名”。
示例:
SELECT c1 AS a,
c2+c3 AS b,
COUNT(*) AS c
FROM t1 GROUP BY 1,2;
表达式引用列别名
在 NPS 兼容性方式下操作时,表达式可以引用选择列表中设置的列别名。
示例:
下列示例说明了如何在表达式中使用选择列表中设置的列别名(a 和 b):
SELECT c1 AS a, a+3 AS b FROM t1;
SELECT c1 AS a, ABS(a) AS b FROM t1 GROUP BY a, b HAVING c1 < 0;
SELECT c1+c3 AS a, CASE WHEN a < 5 THEN a ELSE NULL END AS b FROM t1;
以 NZPLSQL 编写的例程
除了 SQL PL语言之外,还可以使用 NZPLSQL语言
以 NZPLSQL 编写的例程有以下几个限制:
另外,对下列语法关键字的使用进行了限制:
AUTOCOMMIT:例程不能使用下列 SQL 子句:
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞2
添加新评论1 条评论
2020-09-17 20:40
atpeace331: @KiKibj 要是所有数据库都有的话,应用迁移就会轻松不少哈~~