一 概念
游標是sql的乙個記憶體工作區,由系統或使用者以變數的形式定義。游標的作用就是用於臨時儲存從資料庫中提取的資料塊。在某些情況下,需要把資料從存放在磁碟的表中調到計算機記憶體中進行處理,最後將處理結果顯示出來或最終寫回資料庫。這樣資料處理的速度才會提高,否則頻繁的磁碟資料交換會降低效率。
二 型別
cursor型別包含三種: 隱式cursor,顯式cursor和ref cursor(動態cursor)。
1. 隱式cursor:
1).對於select …into…語句,一次只能從資料庫中獲取到一條資料,對於這種型別的dml sql語句,就是隱式cursor。例如:select /update / insert/delete操作。
2)作用:可以通過隱式cusor的屬性來了解操作的狀態和結果,從而達到流程的控制。cursor的屬性包含:
sql%rowcount 整型 代表dml語句成功執行的資料行數
sql%found 布林型 值為true代表插入、刪除、更新或單行查詢操作成功
sql%notfound 布林型 與sql%found屬性返回值相反
sql%isopen 布林型 dml執行過程中為真,結束後為假
3) 隱式cursor是系統自動開啟和關閉cursor.
下面是乙個sample:
sql**
set serveroutput on;
begin
update t_contract_master set liability_state = 1 where policy_code = '123456789';
if sql%found then
dbms_output.put_line('the policy is updated successfully.');
commit;
else
dbms_output.put_line('the policy is updated failed.');
end if;
end;
/ set serveroutput on;
begin
update t_contract_master set liability_state = 1 where policy_code = '123456789';
if sql%found then
dbms_output.put_line('the policy is updated successfully.');
commit;
else
dbms_output.put_line('the policy is updated failed.');
end if;
end;
/在pl/sql中run:
sql**
sql>
the policy is updated failed.
pl/sql procedure successfully completed
sql>
the policy is updated failed.
pl/sql procedure successfully completed
2. 顯式cursor:
(1) 對於從資料庫中提取多行資料,就需要使用顯式cursor。顯式cursor的屬性包含:
游標的屬性 返回值型別 意 義
%rowcount 整型 獲得fetch語句返回的資料行數
%found 布林型 最近的fetch語句返回一行資料則為真,否則為假
%notfound 布林型 與%found屬性返回值相反
%isopen 布林型 游標已經開啟時值為真,否則為假
set serveroutput on;
set serveroutput on;
set serveroutput on;
/run pl/sql,執行結果如下:
sql**
sql>
8780203932
8780203227
8780203218
8771289268
pl/sql procedure successfully completed
set serveroutput on;
end;
/4.常見exception
sql**
1. 錯 誤 名 稱 錯誤** 錯 誤 含 義
2. cursor_already_open ora_06511 試圖開啟已經開啟的游標
3. invalid_cursor ora_01001 試圖使用沒有開啟的游標
4. dup_val_on_index ora_00001 儲存重複值到惟一索引約束的列中
5. zero_divide ora_01476 發生除數為零的除法錯誤
6. invalid_number ora_01722 試圖對無效字元進行數值轉換
7. rowtype_mismatch ora_06504 主變數和游標的型別不相容
8. value_error ora_06502 轉換、截斷或算術運算發生錯誤
9. too_many_rows ora_01422 select…into…語句返回多於一行的資料
10. no_data_found ora_01403 select…into…語句沒有資料返回
11. timeout_on_resource ora_00051 等待資源時發生超時錯誤
12. transaction_backed_out ora_00060 由於死鎖,提交失敗
13. storage_error ora_06500 發生記憶體錯誤
14. program_error ora_06501 發生pl/sql內部錯誤
15. not_logged_on ora_01012 試圖操作未連線的資料庫
16. login_denied ora_01017 在連線時提供了無效使用者名稱或口令
1. 錯 誤 名 稱 錯誤** 錯 誤 含 義
2. cursor_already_open ora_06511 試圖開啟已經開啟的游標
3. invalid_cursor ora_01001 試圖使用沒有開啟的游標
4. dup_val_on_index ora_00001 儲存重複值到惟一索引約束的列中
5. zero_divide ora_01476 發生除數為零的除法錯誤
6. invalid_number ora_01722 試圖對無效字元進行數值轉換
7. rowtype_mismatch ora_06504 主變數和游標的型別不相容
8. value_error ora_06502 轉換、截斷或算術運算發生錯誤
9. too_many_rows ora_01422 select…into…語句返回多於一行的資料
10. no_data_found ora_01403 select…into…語句沒有資料返回
11. timeout_on_resource ora_00051 等待資源時發生超時錯誤
12. transaction_backed_out ora_00060 由於死鎖,提交失敗
13. storage_error ora_06500 發生記憶體錯誤
14. program_error ora_06501 發生pl/sql內部錯誤
15. not_logged_on ora_01012 試圖操作未連線的資料庫
16. login_denied ora_01017 在連線時提供了無效使用者名稱或口令
Oracle中游標Cursor的介紹
游標就是為了不頻繁訪問磁碟而存在的東西。就好像redis一樣,類似於乙個快取。游標 定義游標 cursor cursor name is 開啟游標 open cursor name 運算元據 fetch cursor name set serveroutput on declare define c...
oracle 游標cursor詳解
一 概念 游標是sql的乙個記憶體工作區,由系統或使用者以變數的形式定義。游標的作用就是用於臨時儲存從資料庫中提取的資料塊。在某些情況下,需要把資料從存放在磁碟的表中調到計算機記憶體中進行處理,最後將處理結果顯示出來或最終寫回資料庫。這樣資料處理的速度才會提高,否則頻繁的磁碟資料交換會降低效率。二 ...
oracle 游標操作,cursor
在游標中使用引數 cursor cursor name p state in state type is select statement 沒有引數的寫法是 cursor cursor name is select statement 對於括號裡面的,in 左邊是引數的別名,in 右邊是引數的型別,...