天天看点

DB2V9.7和Oracle的兼容性

从DB2V9.7开始,DB2进一步的增强了与Oracle的兼容性,不但增加了类似于sqllplus的命令行工具,还增加了DBA_*的数据字典,DBMS_OUTPUT等包,更重要的还增加了对Oracle数据库的PL/SQL的支持,使用了一下果然是比较爽。

要使用这些功能,必须得先设置

DB2_COMPATIBILITY_VECTOR变量,变量可以设置的值以及意义在下表中

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 数据类型以及相关联的数字处理。

6(0x20)

VARCHAR2 数据类型 1

启用 VARCHAR2 和 NVARCHAR2 数据类型以及相关联的字符串处理。

7(0x40)

DATE 数据类型 1

允许将 DATE 数据类型用作 TIMESTAMP(0),即,组合的日期和时间值。

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)

兼容数据字典的视图 1

允许创建兼容数据字典的视图。

12(0x800)

PL/SQL 编译 2

允许编译和执行 PL/SQL 语句和语言元素。

13 (0x1000)

不敏感游标

在 SELECT 语句未显式指定 FOR UPDATE 的情况下,使定义为 WITH RETURN 的游标不敏感

14 (0x2000)

INOUT 参数

允许对 INOUT 参数声明指定 DEFAULT

  1. 只有在数据库创建期间才适用。启用或禁用此功能只影响以后创建的数据库。
  2. 要启用所有受支持的 Oracle 兼容性功能,请将此注册表变量设置为值 ORA(相当于十六进制值 FFF)。

设置完该环境变量后,我创建了一个测试库,名称为MYDB,并使用CLPPLUS(该工具类似于oracle的sqlplus)连接了一下库:

[db2i[email protected] ~]$ clpplus sde/[email protected]:60000/mydb      
数据库连接信息      
主机名 = 192.168.100.228      
数据库服务器 = DB2/LINUXX8664  SQL09071      
SQL 授权标识 = sde      
本地数据库别名 = MYDB      
端口 = 60000      
CLPPlus: 版本 1.1      
Copyright © 2009, IBM CORPORATION.  All rights reserved.      

其中sde/esrichina分别是登录数据库的用户名和密码。

@后面的是数据库服务器的机器名或者IP地址

:后面的数字为DB2实例所监听的端口

/后面的为所要连接的数据库名称

可以使用set current schema命令查看改变一下当前的schema为sysibmadm,

SQL> set current schema sysibmadm;      
DB250000I: 成功地完成该命令。      
查看一下所有的数据字典:      
SQL> desc dictionary      
VIEW - DICTIONARY      
********************************************************************************      
名称                 数据类型       类型模式       长度    小数位 可空      
-------------------- --------------- --------------- -------- -------- --------      
TABLE_SCHEMA         VARCHAR         SYSIBM               128        0 N      
TABLE_NAME           VARCHAR         SYSIBM               128        0 N      
COMMENTS             VARCHAR         SYSIBM               254        0 Y      
********************************************************************************      
SQL> select table_name from dictionary;      
TABLE_NAME      
--------------------------------------------------      
ALL_ALL_TABLES      
ALL_ARGUMENTS      
ALL_CATALOG      
ALL_COL_COMMENTS      
ALL_CONSTRAINTS      
ALL_CONS_COLUMNS      
ALL_DEPENDENCIES      
ALL_ERRORS      
ALL_INDEXES      
ALL_IND_COLUMNS      
ALL_IND_PARTITIONS      
ALL_OBJECTS      
ALL_PART_INDEXES      
ALL_PART_KEY_COLUMNS      
ALL_PART_TABLES      
ALL_PROCEDURES      
ALL_SEQUENCES      
ALL_SOURCE      
ALL_SYNONYMS      
ALL_TABLES      
ALL_TAB_COLUMNS      
ALL_TAB_COL_STATISTICS      
TABLE_NAME      
--------------------------------------------------      
ALL_TAB_COMMENTS      
ALL_TAB_PARTITIONS      
ALL_TAB_PRIVS      
ALL_TAB_PRIVS_MADE      
ALL_TAB_PRIVS_RECD      
ALL_TRIGGERS      
ALL_VIEWS      
ALL_VIEW_COLUMNS      
DBA_ALL_TABLES      
DBA_ARGUMENTS      
DBA_CATALOG      
DBA_COL_COMMENTS      
DBA_CONSTRAINTS      
DBA_CONS_COLUMNS      
DBA_DEPENDENCIES      
DBA_ERRORS      
DBA_INDEXES      
DBA_IND_COLUMNS      
DBA_IND_PARTITIONS      
DBA_OBJECTS      
DBA_PART_INDEXES      
DBA_PART_KEY_COLUMNS      
TABLE_NAME      
--------------------------------------------------      
DBA_PART_TABLES      
DBA_PROCEDURES      
DBA_ROLES      
DBA_ROLE_PRIVS      
DBA_SEQUENCES      
DBA_SOURCE      
DBA_SYNONYMS      
DBA_SYS_PRIVS      
DBA_TABLES      
DBA_TABLESPACES      
DBA_TAB_COLUMNS      
DBA_TAB_COL_STATISTICS      
DBA_TAB_COMMENTS      
DBA_TAB_PARTITIONS      
DBA_TAB_PRIVS      
DBA_TRIGGERS      
DBA_VIEWS      
DBA_VIEW_COLUMNS      
DICTIONARY      
DICT_COLUMNS      
ROLE_ROLE_PRIVS      
ROLE_SYS_PRIVS      
TABLE_NAME      
--------------------------------------------------      
ROLE_TAB_PRIVS      
SESSION_PRIVS      
SESSION_ROLES      
USER_ALL_TABLES      
USER_ARGUMENTS      
USER_CATALOG      
USER_COL_COMMENTS      
USER_CONSTRAINTS      
USER_CONS_COLUMNS      
USER_DEPENDENCIES      
USER_ERRORS      
USER_INDEXES      
USER_IND_COLUMNS      
USER_IND_PARTITIONS      
USER_OBJECTS      
USER_PART_INDEXES      
USER_PART_KEY_COLUMNS      
USER_PART_TABLES      
USER_PROCEDURES      
USER_ROLE_PRIVS      
USER_SEQUENCES      
USER_SOURCE      
TABLE_NAME      
--------------------------------------------------      
USER_SYNONYMS      
USER_SYS_PRIVS      
USER_TABLES      
USER_TABLESPACES      
USER_TAB_COLUMNS      
USER_TAB_COL_STATISTICS      
USER_TAB_COMMENTS      
USER_TAB_PARTITIONS      
USER_TAB_PRIVS      
USER_TAB_PRIVS_MADE      
USER_TAB_PRIVS_RECD      
USER_TRIGGERS      
USER_VIEWS      
USER_VIEW_COLUMNS      
检索到 102 行。      

接着查看一下数据库中表明为SERVER_CONFIG的表结构:

SQL> desc sde.server_config      
TABLE - SERVER_CONFIG      
********************************************************************************      
名称                 数据类型       类型模式       长度    小数位 可空      
-------------------- --------------- --------------- -------- -------- --------      
PROP_NAME            VARCHAR         SYSIBM                32        0 N      
CHAR_PROP_VALUE      VARCHAR         SYSIBM               512        0 Y      
NUM_PROP_VALUE       INTEGER         SYSIBM                 4        0 Y      
********************************************************************************      

使用一下DBMS_OUTPUT包:

SQL> set serveroutput on      
SQL> exec dbms_output.put_line('this is a testline'
);      
this
 is
 a testline      
DB250000I: 成功地完成该命令。      

该工具虽然和Oracle的sqlplus相比有些差距,相信会越做越好的,因为IBM毕竟就是IBM。