區(qū)別:1、oracle支持“create or replace”語(yǔ)句,DB2不支持;2、ORACLE中DATE類型是帶有時(shí)分秒的,DB2下DATE只是年月日;3、Oralce中SUBSTR()函數(shù)的第二個(gè)參數(shù)可以取值為0,而DB2中不可以。
本教程操作環(huán)境:Windows7系統(tǒng)、Oracle 11g版、Dell G3電腦。
Oracle和DB2是兩種不同的數(shù)據(jù)庫(kù)。
Oracle:
Oracle是甲骨文公司的一款關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)。
ORACLE數(shù)據(jù)庫(kù)系統(tǒng)是美國(guó)ORACLE公司(甲骨文)提供的以分布式數(shù)據(jù)庫(kù)為核心的一組軟件產(chǎn)品,是目前最流行的客戶/服務(wù)器(CLIENT/SERVER)或B/S體系結(jié)構(gòu)的數(shù)據(jù)庫(kù)之一。比如SilverStream就是基于數(shù)據(jù)庫(kù)的一種中間件。ORACLE數(shù)據(jù)庫(kù)是目前世界上使用最為廣泛的數(shù)據(jù)庫(kù)管理系統(tǒng),作為一個(gè)通用的數(shù)據(jù)庫(kù)系統(tǒng),它具有完整的數(shù)據(jù)管理功能;作為一個(gè)關(guān)系數(shù)據(jù)庫(kù),它是一個(gè)完備關(guān)系的產(chǎn)品;作為分布式數(shù)據(jù)庫(kù)它實(shí)現(xiàn)了分布式處理功能。
DB2:
全稱為IBM DB2。是美國(guó)IBM公司開(kāi)發(fā)的一套關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),它主要的運(yùn)行環(huán)境為UNIX(包括IBM自家的AIX)、Linux、IBM i(舊稱OS/400)、z/OS,以及Windows服務(wù)器版本。
DB2主要應(yīng)用于大型應(yīng)用系統(tǒng),具有較好的可伸縮性,可支持從大型機(jī)到單用戶環(huán)境,應(yīng)用于所有常見(jiàn)的服務(wù)器操作系統(tǒng)平臺(tái)下。 DB2提供了高層次的數(shù)據(jù)利用性、完整性、安全性、可恢復(fù)性,以及小規(guī)模到大規(guī)模應(yīng)用程序的執(zhí)行能力,具有與平臺(tái)無(wú)關(guān)的基本功能和SQL命令。DB2采用了數(shù)據(jù)分級(jí)技術(shù),能夠使大型機(jī)數(shù)據(jù)很方便地下載到LAN數(shù)據(jù)庫(kù)服務(wù)器,使得客戶機(jī)/服務(wù)器用戶和基于LAN的應(yīng)用程序可以訪問(wèn)大型機(jī)數(shù)據(jù),并使數(shù)據(jù)庫(kù)本地化及遠(yuǎn)程連接透明化。 DB2以擁有一個(gè)非常完備的查詢優(yōu)化器而著稱,其外部連接改善了查詢性能,并支持多任務(wù)并行查詢。 DB2具有很好的網(wǎng)絡(luò)支持能力,每個(gè)子系統(tǒng)可以連接十幾萬(wàn)個(gè)分布式用戶,可同時(shí)激活上千個(gè)活動(dòng)線程,對(duì)大型分布式應(yīng)用系統(tǒng)尤為適用。
oracle與db2的區(qū)別
數(shù)據(jù)類型轉(zhuǎn)換函數(shù)
a.子查詢別名 ( as能否使用 )
ORACLE 中支持:select * from(select 1 from dual) 或者 select * from(select 1 from dual) t DB2 中支持:select * from(select 1 from sys.userId) t 或者 select * from(select 1 from sys.userId) as t 兩者兼容 寫(xiě)法:select * from(子查詢) t Oracle中遇到列名為Oracle關(guān)鍵字的,需要用雙引號(hào)括起來(lái)
b.創(chuàng)建索引時(shí) ( replace字段 )
oracle支持,DB2不支持
create or replace語(yǔ)句在DB2下是非法的
不可以用 CREATE OR REPLACE SEQUENCE a1,要用 CREATE SEQUENCE a1
c.DATE數(shù)據(jù)類型的區(qū)別:
ORACLE中DATE類型是帶有時(shí)分秒的,但DB2下DATE只是年月日,如’2007-04-28’,且可作為字符串直接操作,DB2中要記錄時(shí)分秒必須采用TIMESTAMP型。sql傳值的時(shí)候,DB中是日期類型的,如果畫(huà)面中只有年月日(yyyy-MM-dd),在操作數(shù)據(jù)庫(kù)的時(shí)候,傳值時(shí)候要注意:
①用String傳值
②用Date傳值(需要將Date型變量中的時(shí)分秒格式化)
select to_char(systimestamp, 'yyyy-mm-dd hh24:mi:ss:ff') from dual; select to_date(to_char(systimestamp, 'yyyy-mm-dd hh24:mi:ss:ff'),'yyyy-mm-dd hh24:mi:ss:ff')from dual;
d.獲取系統(tǒng)日期:
ORACLE: Select sysdate from dual; DB2: Select current timestamp/date from sysibm.sysdummy1;
e.Substr用法:
SUBSTR(Str,POS,<LENGTH>) ; --Str需要截取的參數(shù),POS從什么位置截取,LENGTH截取的長(zhǎng)度
在Oralce中,position是可以取值為0的,但是在DB2中,取值為0的話會(huì)報(bào)錯(cuò);
在Oracle中,我們的length長(zhǎng)度是可以大于等于char字符串的長(zhǎng)度的,但是函數(shù)本身的處理是依據(jù)你的起始位置position到char字符串結(jié)尾位置的長(zhǎng)度來(lái)處理,并不會(huì)跟你所給定的length來(lái)確定,相當(dāng)于是Oracle為我們做了正確性的辨別并處理掉多余的長(zhǎng)度。
在DB2中,如果length的長(zhǎng)度大于了起始位置到結(jié)束位置之間的長(zhǎng)度,那么數(shù)據(jù)庫(kù)只為我們報(bào)錯(cuò),并不會(huì)像Oracle那樣執(zhí)行出我們想得到的結(jié)果。
f.函數(shù) rownum等的用法區(qū)別:
函數(shù)rownum在DB2中是不被支持的;
如果采用JDBC分頁(yè)的話,注意rownum在DB2中不受支持,比如從masa_area表中取得area_id最小的10條記錄,語(yǔ)句分別如下,注意這里的別名 t 書(shū)寫(xiě)方法
ORACLE: select t.* from (select rownum as r1 ,masa_area.* from masa_area order by area_id) t where t.r1<=10 DB2: select t.* from (select rownumber() over() as r1 ,masa_area.* from masa_area order by area_id) t where t.r1<=10
推薦教程:《Oracle教程》