區別:1、oracle支持“create or replace”語句,DB2不支持;2、ORACLE中date類型是帶有時分秒的,DB2下DATE只是年月日;3、Oralce中SUBSTR()函數的第二個參數可以取值為0,而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的區別
數據類型轉換函數
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截取的長度</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<p>推薦教程:《<a href="https://www.php.cn/oracle/" target="_blank">Oracle教程</a>》</p>