Oracle 動態遊標的使用
create or replace procedure proc_XXX(
p_iBillMonth in number,
p_tab in number,
p_nStatus out number,
一、
create or replace procedure proc_XXX(
p_iBillMonth in number,
p_tab in number,
p_nStatus out number,
p_szErrorMsg out varchar2
)
is
type t_cur is ref cursor;
v_ser t_cur;
TYPE detail_param IS RECORD
(
acc_code number(7),
fee number(9),
time number(1),
cout number(7),
unit number(12)
);
TYPE detail_param_list IS TABLE OF detail_param INDEX BY BINARY_INTEGER;
v_noowner_detail_param_list detail_param_list;
v_owner_detail_param_list detail_param_list;
begin
v_strSql:=' select acc_id,sub_id,to_char(begin_date,''yyyymmddhh24miss''),'
||' to_char(end_date,''yyyymmddhh24miss''),detail_data,rowid from sum_noowner_'||p_iBillMonth
||' where mod(acc_id,10)='||p_tab;
open v_ser for v_strSql;
loop
<
fetch v_ser into v_iAccId,v_iSubId,v_BeginDate,v_EndDate,v_noDetail,v_RowId;
exit when v_ser%notfound;
end loop;
close v_ser;
p_nStatus:=0;
p_szErrorMsg:='Succeed to finish proc_no2ower.';
return;
exception
when others then
p_nStatus:=-1;
p_szErrormsg:='encounter a exception,sqlcode:'||sqlcode
||',sqlerrm:'||sqlerrm||'v_sql:'||v_strSql;
return;
end proc_XXX;
------------------------------------------------------------------------------------------------------------
關於oracle中用儲存過程返回動態記錄集的學習
測試過程:
1、建立測試表
CREATE TABLE student
(
id NUMBER,
name VARCHAR2(30),
sex VARCHAR2(10),
address VARCHAR2(100),
postcode VARCHAR2(10),
birthday DATE,
photo LONG RAW
)
/
2、建立帶ref cursor定義的包和包體及函式:
CREATE OR REPLACE
package pkg_test as
/* 定義ref cursor型別
不加return型別,為弱型別,允許動態sql查詢,
否則為強型別,無法使用動態sql查詢;
*/
type myrctype is ref cursor;
--函式申明
function get(intID number) return myrctype;
end pkg_test;
/
CREATE OR REPLACE
package body pkg_test as
--函式體
function get(intID number) return myrctype is
rc myrctype; --定義ref cursor變數
sqlstr varchar2(500);
begin
if intID=0 then
--靜態測試,直接用select語句直接返回結果
open rc for select id,name,sex,address,postcode,birthday from student;
else
--動態sql賦值,用:w_id來申明該變數從外部獲得
sqlstr := 'select id,name,sex,address,postcode,birthday from student where id=:w_id';
--動態測試,用sqlstr字串返回結果,用using關鍵詞傳遞引數
open rc for sqlstr using intid;
end if;
return rc;
end get;
end pkg_test;
/
3、用pl/sql塊進行測試:
declare
w_rc pkg_test.myrctype; --定義ref cursor型變數
--定義臨時變數,用於顯示結果
w_id student.id%type;
w_name student.name%type;
w_sex student.sex%type;
w_address student.address%type;
w_postcode student.postcode%type;
w_birthday student.birthday%type;
begin
--呼叫函式,獲得記錄集
w_rc := pkg_test.get(1);
--fetch結果並顯示
fetch w_rc into w_id,w_name,w_sex,w_address,w_postcode,w_birthday;
dbms_output.put_line(w_name);
end;
4、測試結果:
透過。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9099175/viewspace-902668/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 動態遊標的操作~~~
- oracle 儲存過程遊標的使用Oracle儲存過程
- Oracle顯示遊標的使用及遊標for迴圈Oracle
- oracle 遊標中使用 動態 sqlOracleSQL
- Oracle與MySQL內嵌遊標的使用示例OracleMySql
- SQL SERVER 遊標的使用SQLServer
- Oracle動態遊標Oracle
- SqlServer遊標的建立與使用SQLServer
- Oracle遊標共享,父遊標和子游標的概念Oracle
- Oracle PL/SQL 關於遊標的介紹OracleSQL
- 關於Oracle遊標的簡單定義Oracle
- SYS_REFCURSOR系統遊標的使用
- mysql 遊標的使用(儲存過程)MySql儲存過程
- 關於MySQL遊標的巢狀使用MySql巢狀
- Oracle動態語句中返回遊標Oracle
- 遊標的學習
- oracle遊標的一些基礎問題Oracle
- orcale 之遊標的屬性
- 簡單測試動態遊標(REF CURSOR)的使用
- 關於遊標的一些理解
- 【CURSOR】Oracle繫結變數、執行計劃對遊標的影響Oracle變數
- ORACLE中帶引數、REF遊標及動態SQL例項OracleSQL
- MyBatis 呼叫Oracle儲存過程,傳參、返回遊標的值獲取--示例MyBatisOracle儲存過程
- oracle遊標使用全解Oracle
- Oracle 遊標使用全解Oracle
- [轉]oracle 遊標使用大全Oracle
- Oracle 遊標使用大全(轉)Oracle
- Oracle遊標使用大全(轉)Oracle
- 深入理解父遊標,子游標的概念
- MYsql-儲存過程-遊標的巢狀MySql儲存過程巢狀
- Oracle 動態SQLOracleSQL
- 智慧指標的模板,用來管理動態分配的記憶體指標記憶體
- Oracle使用cursor for隱式遊標Oracle
- oracle 監聽 靜態 動態Oracle
- SQL Story(十)————遊標的應該與不應該 (轉)SQL
- oracle遊標簡單使用小記Oracle
- Oracle 觸發器中使用遊標Oracle觸發器
- Oracle資料庫遊標使用大全Oracle資料庫