首頁  >  文章  >  資料庫  >  oracle與db2的差別是什麼

oracle與db2的差別是什麼

青灯夜游
青灯夜游原創
2022-01-07 17:15:5911203瀏覽

區別:1、oracle支援「create or replace」語句,DB2不支援;2、ORACLE中DATE類型是帶有時分秒的,DB2下DATE只是年月日;3、Oralce中SUBSTR( )函數的第二個參數可以取值為0,而DB2中不可以。

oracle與db2的差別是什麼

本教學操作環境:Windows7系統、Oracle 11g版、Dell G3電腦。

Oracle和DB2是兩種不同的資料庫。

Oracle:

Oracle是甲骨文公司的一款關聯式資料庫管理系統。

ORACLE資料庫系統是美國ORACLE公司(甲骨文)提供的一組以分散式資料庫為核心的軟體產品,是目前最受歡迎的客戶/伺服器(CLIENT/SERVER)或B/S體系結構的資料庫之一。例如SilverStream就是基於資料庫的一種中間件。 ORACLE資料庫是目前世界上使用最為廣泛的資料庫管理系統,作為一個通用的資料庫系統,它具有完整的資料管理功能;作為一個關係資料庫,它是一個完整關係的產品;作為分散式資料庫它實現了分佈式處理功能。

DB2:

全稱為IBM DB2。是美國IBM公司開發的一套關聯式資料庫管理系統,它主要的運作環境為UNIX(包括IBM自家的AIX)、Linux、IBM i(舊稱OS/400)、z/OS,以及Windows伺服器版本。

DB2主要應用於大型應用系統,具有較好的可擴充性,可支援從大型主機到單一使用者環境,應用於所有常見的伺服器作業系統平台下。 DB2提供了高層次的資料可利用性、完整性、安全性、可恢復性,以及小規模到大規模應用程式的執行能力,具有與平台無關的基本功能和SQL命令。 DB2採用了數據分級技術,能夠使大型機數據很方便地下載到LAN資料庫伺服器,使得客戶機/伺服器用戶和基於LAN的應用程式可以存取大型機數據,並使資料庫本地化及遠端連接透明化。 DB2以擁有非常完整的查詢最佳化器而著稱,其外部連接改善了查詢效能,並支援多任務並行查詢。 DB2具有很好的網路支援能力,每個子系統可以連接十幾萬個分散式用戶,可同時啟動上千個活動線程,對大型分散式應用系統特別適用。

oracle與db2的差異

資料型別轉換函數

oracle與db2的差別是什麼

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

两者兼容  写法:select * from(子查询) t

Oracle中遇到列名为Oracle关键字的,需要用双引号括起来

b.建立索引時( replace欄位)

oracle支持,DB2不支援 

create or replace語句在DB2下是非法的

不可以用 CREATE OR REPLACE SEQUENCE a1,要用 CREATE SEQUENCE a1

c.DATE資料類型的差異:

ORACLE中DATE類型是帶有時分秒的,但DB2下DATE只是年月日,如'2007-04-28',且可作為字串直接操作,DB2中要記錄時分秒必須採用TIMESTAMP型。 sql傳值的時候,DB中是日期類型的,如果畫面中只有年月日(yyyy-MM-dd),在操作資料庫的時候,傳值時候要注意:

①用String傳值

②用Date傳值(需要將Date型變數中的時分秒格式化)

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.取得系統日期:

ORACLE: Select sysdate from dual;
DB2:    Select current timestamp/date from sysibm.sysdummy1;

e.Substr用法:

SUBSTR(Str,POS,<LENGTH>) ; --Str需要截取的参数,POS从什么位置截取,LENGTH截取的长度

在Oralce中,position是可以取值為0的,但是在DB2中,取值為0的話會報錯;

在Oracle中,我們的length長度是可以大於等於char字串的長度的,但是函數本身的處理是依據你的起始位置position到char字串結尾位置的長度來處理,並不會跟你所給定的length來確定,相當於是Oracle為我們做了正確性的辨別並處理掉多餘的長度。

在DB2中,如果length的長度大於了起始位置到結束位置之間的長度,那麼資料庫只為我們報錯,並不會像Oracle那樣執行出我們想得到的結果。

f.函數rownum等的用法差異:

函數rownum在DB2中是不被支援的;

如果採用JDBC分頁的話,注意rownum在DB2中不受支持,例如從masa_area表中取得area_id最小的10條記錄,語句分別如下,注意這裡的別名t 書寫方法

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教學

以上是oracle與db2的差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn