從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
- 隻有在資料庫建立期間才适用。啟用或禁用此功能隻影響以後建立的資料庫。
- 要啟用所有受支援的 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。