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 --接收內容
)

/*

-- 創建臨時表 用於存儲游標數據(創建語句放在sql窗口執行)
create global temporary table temp_h5_tykj
(
code varchar2(50),
name varchar2(100)
)ON commit preserve rows;

*/

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;

--- 清空下臨時表的數據

execute immediate 'truncate table temp_h5_tykj';

-- 調用子過程(返回游標的)

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;

insert into temp_h5_tykj(code,name)
values (tykj_tab(i).code,tykj_tab(i).name);  -- 將游標數據存放到臨時表中


/*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"';*/

·V_SQL := 'select code,name from temp_h5_tykj';

·V_COL_LST := 'code as "code",name as "name"';

·

----  子過程實例

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 

 


免責聲明!

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



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