1. 程式人生 > 其它 >oracle 儲存過程呼叫有遊標的儲存過程

oracle 儲存過程呼叫有遊標的儲存過程

create or replace procedure pcx_h5_htqyyscx(
O_CODE OUT NUMBER,
O_NOTE OUT VARCHAR2,
O_HASRECORDSET OUT NUMBER,
O_RESULT OUT SYS_REFCURSOR,
I_PAGING IN NUMBER,
I_PAGENO IN NUMBER,
I_PAGELENGTH IN NUMBER,
I_TOTALROWS IN OUT NUMBER,
I_SORT IN VARCHAR2,
·

·

·
I_JSNR IN VARCHAR2 --接收內容
)

V_SQL VARCHAR2(32767);
V_COL_LST VARCHAR2(2000);
V_SORT VARCHAR2(2000);

--定義遊標型別

rs sys_refcursor;

--TYPE 表示定義變數,變數型別是RECORD(變數1,變數2···)
type qyys_rec_type is record (code varchar2(100), contnumber varchar2(100), contname varchar2(100), datajson varchar2(4000), savepath varchar2(200));

--定義一個存放記錄行型別元素的集合型別即表

type qyys_tab_type is table of qyys_rec_type;
qyys_tab qyys_tab_type;

begin
O_CODE := 1;
O_NOTE := '成功';
O_HASRECORDSET := 1;

-- 呼叫子過程(返回遊標的)

PCX_FAMILY_APP_QYYS(rs,I_TOTALROWS,I_PAGENO,I_PAGELENGTH,I_SORT,i_htid,v_khbh,1,null,null);

--遍歷遊標取數
fetch rs bulk collect into qyys_tab;
for i in 1..qyys_tab.count loop
qyys_tab.extend;
v_code := qyys_tab(i).code;
v_contnumber := qyys_tab(i).contnumber;
v_contname := qyys_tab(i).contname;
v_datajson := qyys_tab(i).datajson;
v_savepath := qyys_tab(i).savepath;
end loop;

V_SQL := 'select ''' || v_code || ''' as code,''' || v_contnumber || ''' as contnumber,''' || v_contname || ''' as contname,'''
|| v_datajson || ''' as datajson,''' || v_savepath || ''' as savepath from dual';

V_COL_LST := 'code as "code",contnumber as "contnumber",contname as "contname",datajson as "datajson",savepath as "savepath"';

·

·

·

---- 子過程例項

CREATE OR REPLACE PROCEDURE PCX_FAMILY_APP_QYYS(CUR_RESULT OUT TYPES.CURSORTYPE, --結果遊標
O_COUNT OUT NUMBER, --結果集總記錄數
I_PAGENUMBER IN NUMBER, --頁碼
I_PAGECOUNT IN NUMBER, --每頁行數
I_SORT IN VARCHAR2 DEFAULT NULL, --排序欄位
I_ID IN NUMBER, --合同ID 或 利益分配明細ID
I_CUSTNO IN VARCHAR2,
I_SIGN_TYPE IN NUMBER,
I_ID2 IN NUMBER,
I_ID3 IN NUMBER
) IS

·

·

·

V_SQL := '
SELECT '''||V_HTMB||''' o_tempcode,
'''||·····||''' o_contnumber,
'''||······||''' o_contname,
'''||·····||''' o_datajson,
'''||·····||''' o_savepath
FROM DUAL';
END IF;

/* o_tempcode 模板編碼
o_contnumber 合同編號
o_contname 合同名稱
o_datajson 填充資料
o_savepath 儲存路徑 */
V_COLIST := 'o_tempcode,o_contnumber,o_contname,o_datajson,o_savepath';

也可以參考以下地址:

https://blog.csdn.net/zy103118/article/details/86300243