動態Ref Cursor的定義與呼叫

2021-06-26 11:25:41 字數 2636 閱讀 3449

1.定義:

type ref_cur is ref cursor;

2.動態cursor作為out引數 儲存過程的實現

舉個最簡單的例子,根據table name動態獲取cursor

procedure p_get_cur(i_table_name in varchar2, o_ref_cur out ref_cur) as

begin

if upper(i_table_name) = 't_bank_account' then

open o_ref_cur for

select bank_account

from t_bank_account

where bank_account is not null;

elsif upper(i_table_name) = 't_fb_payment_jp' then

open o_ref_cur for

select bank_account

from t_fb_payment_jp

where bank_account is not null;

end if;

end p_get_cur;

procedure p_bank_acco_mask(i_table_name in varchar2,

i_coulumn in varchar,

o_error_str in out varchar2,

o_result in out number,

m_has_exception in out boolean) as

v_update_sql varchar(800);

v_update_sql2 varchar(800);

i int := 1;

v_bank_account varchar2(50);

v_bank_account_new varchar2(50);

v_char varchar(1);

v_bank_account_curs ref_cur;

v_select_sql varchar2(800);

begin

o_result := pkg_ls_pub_code_cst.batch_result__success;

--procedure返回記錄集:

----------------------宣告乙個package--------------

create or replace package pkg_test

as typemyrctypeis ref cursor;

procedure get_r(p_id number,p_rc out myrctype); --package中宣告名為get 的procedure(只有介面沒內容)

end pkg_test;

-----------------宣告package body,即上面package中的內容,包括procedure get---------------------

create or replace package body pkg_test

as procedure get_r(p_id number,p_rc out myrctype)

is sqlstr varchar2 (500);

begin

if p_id = 0 then

open p_rc for

select id, name, ***, address, postcode, birthday

from student;

else

sqlstr :=

'select id,name,***,address,postcode,birthday

from student where id=:w_id'; --w_id是個引數,

--以下 p_rc是個ref cursor游標型別,而且是out型引數,即可返回乙個記錄集了。using p_id就是替換上面sql中:w_id值拉:)

open p_rc for sqlstr using p_id; 

end if;

end get;

end pkg_test;

--function返回記錄集的例子,原理和上面相同,而是用function的return值來返回記錄集。

函式返回記錄集:

建立帶ref cursor定義的包和包體及函式:

複製** **如下:

create or replace

package pkg_test as

type myrctype is ref cursor;

function get_r(intid number) return myrctype;

end pkg_test;

/ create or replace

package body pkg_test as

--函式體

function get_r(intid number) return myrctype is

rc myrctype; --定義ref cursor變數

sqlstr varchar2(500);

begin

if intid=0 then

ref cursor 在plsql中的一例

ref cursor 可以作為c 的資料庫介面,但是在plsql中如何引用呢 舉乙個例子 set serveroutput on declare v tab name varchar2 20 v version varchar2 10 v tab crt str varchar2 2000 v ta...

定義動態陣列

開闢一維陣列m 8 int t new int m 開闢一維動態陣列,相當於t m int t new int 8 開闢乙個空間為8的整型陣列空間 int t new int 8 開闢了乙個整型且賦值為8的空間 int t new int 開闢單變數位址空間,即將int型別的空間位址賦給指標t 銷毀...

UITableView的cell 動態 定義 高度

首先在uitableview 的 方法中算出每個cell 的真實高度,然後設定便ok。如下 html view plain copy uitableviewcell tableview uitableview tableview cellforrowatindexpath nsindexpath i...