ORACLE 存儲過程提高


1.SQLCODE和SQLERRM

2.%TYPE和%ROWTYPE的使用

3.sql%rowcount的作用

 

1.SQLCODE和SQLERRM 

SQLCode:數據庫操作的返回碼,其中

0--成功;
-1--失敗;
100--沒有檢索到數據。
+1--用戶自定義異常

sqlerrm函數返回指定錯誤代碼的錯誤信息。 

在一個內在的異常中,SQLCODE返回Oracle錯誤的序號,而SQLERRM返回的是相應的錯誤消息,錯誤消息首先顯示的是錯誤代碼。

SQLCODE返回的是負數,除非Oracle的錯誤為“ORA-01403:NO DATA FOUND”(譯:ORA-01403:未找到數據),當Oracle錯誤為“ORA-01403:NO DATA FOUND”時,其對應的SQLCODE為+100。對於用戶自定義的異常,SQLCODE返回的是+1,而SQLERRM返回的是User-Defined Exception。  
一個Oracle的錯誤消息最多只能包含512個字節的錯誤代碼。如果沒有異常被觸發,則SQLCODE返回0,SQLERRM返回“ORA-0000:normal, successful completion”。 

sqlerrm如何使用?
sqlcode和sqlerrm是不能直接在sql語句中使用,必須先將其賦給變量后,才能在sql語句中使用,如下:

  d_trans_error               NUMBER

   d_trans_error_msg     VARCHAR2(512)

   d_trans_error := SQLCODE;
   d_trans_error_msg := SUBSTR(SQLERRM,1,512);

 2.%TYPE和%ROWTYPE的使用

 %TYPE說明
為了使一個變量的數據類型與另一個已經定義了的變量(尤其是表的某一列)的數據類型相一致,Oracle提供了%TYPE定義方式。當被參照的那個變量的數據類型改變了之后,這個新定義的變量的數據類型會自動跟隨其改變,容易保持一致,也不用修改PL/SQL程序了。當不能確切地知道被參照的那個變量的數據類型時,就只能采用這種方法定義變量的數據類型。

MSG VARCHAR2(20) :='小紅'; 
STRSQL MSG%TYPE;

2 %ROWTYPE說明
如果一個表有較多的列,使用%ROWTYPE來定義一個表示表中一行記錄的變量,比分別使用%TYPE來定義表示表中各個列的變量要簡潔得多,並且不容易遺漏、出錯。這樣會增加程序的可維護性。

   為了使一個變量的數據類型與一個表中記錄的各個列的數據類型相對應、一致,Oracle提供%ROWTYPE定義方式。當表的某些列的數據類型改變了之后,這個新定義的變量的數據類型會自動跟隨其改變,容易保持一致,也不用修改PL/SQL程序了。當不能確切地知道被參照的那個表的結構及其數據類型時,就只能采用這種方法定義變量的數據類型。

   一行記錄可以保存從一個表或游標中查詢到的整個數據行的各列數據。一行記錄的各個列與表中一行的各個列有相同的名稱和數據類型。
比如游標

type cursor_type is ref cursor; 
table_cursor cursor_type; 
v_import_table tbl_name%rowtype; 
begin 
open table_cursor for select * from tbl_name; 
loop 
fetch table_cursor into v_import_table; 
exit when tbl_cursor%notfound; 
……….. 
end loop; 
close table_cursor; 
或者游標可以這樣定義: 
cusor table_ cusor is select * from tbl_name 
3.游標的4個 屬性 
%isopen:游標打開時返回true 
%found 游標結果集有數據返回true 
%notfound 游標結果集不存在數據時為true 
%rowcount 返回已提取數據的實際行數 

3.sql%rowcount的作用

sql%rowcount用於記錄修改的條數,必須放在一個更新或者刪除等修改類語句后面執行,select語句用於查詢的話無法使用,

當你執行多條修改語句時,按照sql%rowcount 之前執行的最后一條語句修改數為准。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM