如何使Oracle过程返回结果集

Posted

技术标签:

【中文标题】如何使Oracle过程返回结果集【英文标题】:How to make Oracle procedure return result sets 【发布时间】:2008-11-20 08:01:38 【问题描述】:

SQL Server 过程可以返回结果集。我有一个表 emp(emp__id, emp__name, ...)。以下过程将返回与提供的姓名匹配的员工列表。

CREATE OR REPLACE PROCEDURE get_employee_by_name ( @name VARCHAR(100) )
AS
SELECT emp_id, emp_name
FROM emp
WHERE emp_name = @name;

所以在客户端代码中,我使用ADO.NET来获取数据。

SQLDataAdapter adapter = new SQLDataAdapter("get_employee_by_name", cnString);
SQLDataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;
DataTable dt = new DataTable("employee");

adapter.Fill(dt);

如何在 PL/SQL 中进行等效编码?

【问题讨论】:

【参考方案1】:

为存储过程使用 Ref 游标:http://www.oradev.com/ref_cursor.jsp

对于客户端部分,请使用 Oracle 数据提供程序。您可以从 Oracle 下载它,语法类似于 SQLDataAdapter。像这样的:

OracleDataAdapter da = new OracleDataAdapter();
da.SelectCommand = new OracleCommand("get_employee_by_name", Connection);
OracleParameter prm = da.SelectCommand.Parameters.Add("pName", OracleDbType.VarChar2);
prm.Direction = ParameterDirection.Input;
prm.Value = "MyName";
prm = da.SelectCommand.Parameters.Add("pResult", OracleDbType.RefCursor);
prm.Direction = ParameterDirection.Output;
DataTable dt = new DataTable();
da.Fill(dt);

【讨论】:

以上是关于如何使Oracle过程返回结果集的主要内容,如果未能解决你的问题,请参考以下文章

oracle存储过程如何输出结果集

如何使从 oracle 返回的结果集保持其列别名字符大小写

oracle 如何返回多条记录

在oracle里,多条返回结果,如何只能返回一条

ORACLE 存储过程怎么返回临时表结果集

JAVA获取ORACLE存储过程返回结果集的问题