天天看點

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。