Oracle與DB2存儲過程不同之處的表現(xiàn)
文章主要描述的是Oracle數(shù)據(jù)庫與DB2存儲過程的不同之處,假如你對Oracle數(shù)據(jù)庫與DB2存儲過程的不同之處差異心存好奇的話,你就可以對以下的文章點(diǎn)擊觀看了,以下就是文章的詳細(xì)內(nèi)容介紹,望大家借鑒。
Oracle與DB2存儲過程的差異
(1)2010-03-01 08:04存儲過程本質(zhì)還是由SQL語句實(shí)現(xiàn)的,只不過可以添加邏輯性過程。
Oracle的存儲過程只了解其語法,最近在學(xué)DB2存儲過程??傆X得單獨(dú)去看它的語法什么的,沒什么效果。就拿一份項(xiàng)目中Oracle存儲過程文件對照著看,試著將其改成db2的。發(fā)現(xiàn)了幾點(diǎn)區(qū)別:
- Create or replace procedure proname(var_in in number,var_out out number)
- As
- Var1 varchar2(18);
- Var2 user.name%TYPE;
- Begin
- Var_out := 0;
- Execute immediate ‘truncate table user’;
- …
- End
- create procedure proname(in var_in int,out var_out int)
- Declare var1 varchar(18);
- Begin
- Set var_out=0;
- …
- End
(1) DB2中不支持”or replace”的語法;且參數(shù)名與IN/OUT的位置也需互換,聲明變量時須使用declare關(guān)鍵字,為變量賦值時須使用set關(guān)鍵字。
(2) 而對于Oracle中的%TYPE的功能,DB2中好像還沒有很好的實(shí)現(xiàn)方式。
(3) 同樣,Oracle中清空表的命令truncate,DB2也不能原樣引用,但它也提供了2種實(shí)現(xiàn)方式,一是將一空文件的內(nèi)容導(dǎo)入表中import null.dat ;二是設(shè)置表的特性為不記錄日志alter table tablename .但是第二種方式會在某些情況下導(dǎo)致原表無法使用,具體的還沒弄清楚呢。
(4) 至于sql語句表現(xiàn)不同應(yīng)該就是Oracle與db2各自的語法了。比如說Oracle的rownum,db2可以使用fetch first n only,或row_number() over()等。
當(dāng)然,調(diào)用存儲過程的方法是一樣的,call proname(2,?),輸出參數(shù)用?來代替。
對于上面的第2點(diǎn)要想個好的解決方法,這種功能在DB2存儲過程中用的還是蠻多的。
以上的相關(guān)內(nèi)容就是對Oracle與DB2存儲過程的差異的介紹,望你能有所收獲。
【編輯推薦】