oracle 存储过程返回 结果集 table形式的案例
导读:收集整理的这篇文章主要介绍了oracle 存储过程返回 结果集 table形式的案例,觉得挺不错的,现在分享给大家,也给大家做个参考。 --Sys_refcursor 和 cursor...
收集整理的这篇文章主要介绍了oracle 存储过程返回 结果集 table形式的案例,觉得挺不错的,现在分享给大家,也给大家做个参考。 --Sys_refcursor 和 cursor 优缺点比较
优点比较
优点一:
sys_refcursor,可以在存储过程中作为参数返回一个table格式的结构集(我把他认为是table类型,容易理解,其实是一个游标集), cursor 只能用在存储过程,函数,包等的实现体中,不能做参数使用。
优点二:
sys_refcursor 这东西可以使用在包中做参数,进行数据库面向对象开放。哈哈。我喜欢。cursor就不能。
create or replace PRocedure p_test(p_cur out sys_refcursor) as begin oPEn p_cur for select * From emp; end p_test; declarep_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结果
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.在程序中调用存储过程的值
public @R_777_2358@ic 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。并且输入参数 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);
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。
您可能感兴趣的文章:- oracle导出sql语句的结果集和保存执行的sql语句(深入分析)
- Oracle中返回结果集的存储过程分享
- oracle sys_connect_by_path 函数 结果集连接
- Asp Oracle存储过程返回结果集的代码
- 关于C#中使用Oracle存储过程返回结果集的问题
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: oracle 存储过程返回 结果集 table形式的案例
本文地址: https://pptw.com/jishu/631580.html