1. 程式人生 > >Oracle與DB2儲存過程不同之處

Oracle與DB2儲存過程不同之處

文章主要描述的是Oracle資料庫與DB2儲存過程的不同之處,假如你對Oracle資料庫與DB2儲存過程的不同之處差異心存好奇的話,你就可以對以下的文章點選觀看了,以下就是文章的詳細內容介紹,望大家借鑑。

Oracle與DB2儲存過程的差異

(1)儲存過程本質還是由SQL語句實現的,只不過可以新增邏輯性過程。

Oracle的儲存過程只瞭解其語法,最近在學DB2儲存過程。總覺得單獨去看它的語法什麼的,沒什麼效果。就拿一份專案中Oracle儲存過程檔案對照著看,試著將其改成db2的。發現了幾點區別:

  1. Create or replace procedure proname(var_in in number,var_out out number)  
  2. As  
  3. Var1 varchar2(18);  
  4. Var2 user.name%TYPE;  
  5. Begin  
  6. Var_out :0;  
  7. Execute immediate ‘truncate table user’;  
  8. …  
  9. End  
  10. create procedure proname(in var_in int,out var_out int)  
  11. Declare var1 varchar(18);  
  12. Begin  
  13. Set var_out=0;  
  14. …  
  15. End  

(1) DB2中不支援”or replace”的語法;且引數名與IN/OUT的位置也需互換,宣告變數時須使用declare關鍵字,為變數賦值時須使用set關鍵字。

(2) 而對於Oracle中的%TYPE的功能,DB2中好像還沒有很好的實現方式。

(3) 同樣,Oracle中清空表的命令truncate,DB2也不能原樣引用,但它也提供了2種實現方式,一是將一空檔案的內容匯入表中import null.dat ;二是設定表的特性為不記錄日誌alter table tablename .但是第二種方式會在某些情況下導致原表無法使用,具體的還沒弄清楚呢。

(4) 至於sql語句表現不同應該就是Oracle與db2各自的語法了。比如說Oracle的rownum,db2可以使用fetch first n only,或row_number() over()等。

當然,呼叫儲存過程的方法是一樣的,call proname(2,?),輸出引數用?來代替。

對於上面的第2點要想個好的解決方法,這種功能在DB2儲存過程中用的還是蠻多的。

Oracle與DB2儲存過程的差異

以上的相關內容就是對Oracle與DB2儲存過程的差異的介紹,望你能有所收穫。

PS:

%type說明

vempno emp.empno%type;

例如上面的這句話,
你的vempno就是你定義的變數,和麵的那個emp是你資料庫裡面存在的表,他的表裡面有意個empno欄位,然後%type就是empno的資料型別,
總體說這句話就是,讓vempno與你資料庫裡面的表字段的屬性匹配,這個你就可以很方便的對emp進行操作了,不會因為型別不匹配而報莫名的錯誤。
簡單的說定義的這個儲存過程肯定是與這個表有一定關係的。方便操作