oracle 存儲過程返回 結(jié)果集 table形式的案例
--sys_refcursor 和 cursor 優(yōu)缺點比較
優(yōu)點比較
優(yōu)點一:
sys_refcursor,可以在存儲過程中作為參數(shù)返回一個table格式的結(jié)構(gòu)集(我把他認(rèn)為是table類型,容易理解,其實是一個游標(biāo)集), cursor 只能用在存儲過程,函數(shù),包等的實現(xiàn)體中,不能做參數(shù)使用。
優(yōu)點二:
sys_refcursor 這東西可以使用在包中做參數(shù),進(jìn)行數(shù)據(jù)庫面向?qū)ο箝_放。哈哈。我喜歡。cursor就不能。
create or replace procedure p_test(p_cur out sys_refcursor) as begin open p_cur for select * from emp; end p_test; declare p_cur sys_refcursor; i emp%rowtype; begin p_test(p_cur); loop fetch p_cur into i; exit when p_cur%notfound; DBMS_OUTPUT.PUT_LINE('---'||i.ename||'---'||i.empno); end loop; close p_cur; end;
補充:Oracle存儲過程返回select * from table結(jié)果
1.首先建立一個包
create or replace package LogOperation is type listLog is ref cursor; procedure PCenterExamine_sel(listCenterExamine out listlog,testlist out listLog,numpage in decimal); end;
2.建立包中的主體
create or replace package body LogOperation is procedure PCenterExamine_sel ( listCenterExamine out listlog, testlist out listlog, numpage in decimal ) as begin open listCenterExamine for select * from Log_CenterExamine; open testlist for select * from Log_CenterExamine; end; end;
3.在程序中調(diào)用存儲過程的值
public static DataSet RunProcedureGetDataSet(string storedProcName, OracleParameter[] parameters) { string connectionString ="192.168.1.1/db"; using (OracleConnection connection = new OracleConnection(connectionString)) { DataSet dataSet = new DataSet(); connection.Open(); OracleDataAdapter sqlDA = new OracleDataAdapter(); sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters); sqlDA.Fill(dataSet, "dt"); connection.Close(); return dataSet; } }
private static OracleCommand BuildQueryCommand(OracleConnection connection, string storedProcName, IDataParameter[] parameters) { OracleCommand command = new OracleCommand(storedProcName, connection); command.CommandType = CommandType.StoredProcedure; foreach (OracleParameter parameter in parameters) { command.Parameters.Add(parameter); } return command; }
4.有幾個out的ref cursor,變量ds中就用幾個DataTable。并且輸入?yún)?shù) indecimal也不會受影響,并且可以參加存儲過程的運算
OracleParameter[] paramDic = { new OracleParameter("listCenterExamine",OracleType.Cursor), new OracleParameter("testlist",OracleType.Cursor), new OracleParameter("numpage",OracleType.Int32)}; paramDic[0].Direction = ParameterDirection.Output; paramDic[1].Direction = ParameterDirection.Output; paramDic[2].Value = 1; ds = Model.OracleHelper.RunProcedureGetDataSet("LogOperation.PCenterExamine_sel", paramDic);
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
解讀Oracle中代替like進(jìn)行模糊查詢的方法instr(更高效)
這篇文章主要介紹了解讀Oracle中代替like進(jìn)行模糊查詢的方法instr(更高效),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11oracle中 procedure(存儲過程)和function(函數(shù))本質(zhì)區(qū)別
這篇文章主要介紹了 oracle中 procedure(存儲過程)和function(函數(shù))本質(zhì)區(qū)別,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-02-02Oracle中PL/SQL復(fù)合數(shù)據(jù)類型
這篇文章介紹了Oracle中PL/SQL的復(fù)合數(shù)據(jù)類型,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05linux服務(wù)器開機啟動oracle的設(shè)置方法
這篇文章主要介紹了linux服務(wù)器下oracle開機自啟動設(shè)置,本文分步驟給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-10-10Oracle中 關(guān)于數(shù)據(jù)庫存儲過程和存儲函數(shù)的使用
本篇文章,小編將為大家介紹,在Oracle中 關(guān)于數(shù)據(jù)庫存儲過程和存儲函數(shù)的使用,有需要的朋友可以參考一下2013-04-04