orale返回游標

2021-06-16 07:29:21 字數 1522 閱讀 9659

第一種情況是返回的游標是某個具體的表或檢視的資料,如: 

sql-code: 

複製**

**如下:

create or replace procedure p_testa ( 

presult out sys_refcursor  ) 

as begin 

open presult for select * from users; 

end p_testa; 

其中users就是資料庫中乙個表。在呼叫的時候只要宣告乙個該錶的rowtype型別就可以了: 

sql-code: 

複製**

**如下:

create or replace procedure p_testb 

as varcursor sys_refcursor; 

r users%rowtype; 

begin 

p_testa(varcursor); 

loop 

fetch varcursor into r; 

exit when varcursor%notfound; 

dbms_output.put_line(r.name); 

end loop; 

end p_testb; 

第二種情況,我們返回的不是表的所有的列,或許只是其中一列或兩列,如: 

sql-code: 

複製**

**如下:

create or replace procedure p_testa ( 

presult out sys_refcursor  ) 

as begin 

open presult for select id,name from users; 

end p_testa; 

這裡我們只返回了users表的id,name這兩個列,那麼呼叫的時候也必須做相應的修改: 

sql-code: 

複製**

**如下:

create or replace procedure p_testb 

as varcursor sys_refcursor; 

cursor tmpcursor is select id,name from users where rownum=1; 

r tmpcursor%rowtype; 

begin 

p_testa(varcursor); 

loop 

fetch varcursor into r; 

exit when varcursor%notfound; 

dbms_output.put_line(r.id); 

end loop; 

end p_testb; 

與之前不同的是我們宣告了乙個游標型別的變數tmpcursor ,注意tmpcursor 的結構必須與儲存過程p_testa 返回的游標結構一致,否則就會出現錯誤。同理只要保持兩個游標型別結構一致,就可以實現自由呼叫。

此外還可以參考:   或者

隱式游標返回游標總數

第乙個應用得知更新的行數 1 隱式游標在正常執 況下更新的行數並不知道,可以根據sql rowcount得知更新的行數 set serveroutput on begin update student set first name d where first name like d dbms out...

Orale資料匯入

list sql loader的使用方法 用法 sqlldr keyword value keyword value,有效的關鍵字 userid oracle 使用者名稱 口令 control 控制檔名 log 日誌檔名 bad 錯誤檔名 data 資料檔名 discard 廢棄檔名 discard...

Oracle儲存過程返回游標

oracle儲存過程返回游標 有倆種方法 一種是宣告系統游標,一種是宣告自定義游標,然後後面操作一樣,引數型別為 in out 或out 1 宣告個人系統游標.推薦 create or replace p temp procedure cur arg out sys refcursor 方法1 be...