c# - 来自普通 SQL 的 Oracle sys_refcursor

标签 c# .net oracle plsql sys-refcursor

我有一个像这样的(简化的)Oracle SQL:

declare
  xd number;
  xm number;
  DataOut sys_refcursor;
begin
  xd := to_number(to_char(sysdate, 'dd'));
  xm := to_number(to_char(sysdate, 'mm'));

  open DataOut for
  select * from dual;  
end;

而且我希望能够从 DataOut 参数中返回的数据填充 .Net 中的 DataTable。

我一直在尝试各种方法,但似乎无法访问 DataOut 游标。 我怎么调用它?

OracleCommand c = new OracleCommand();
c.CommandType = CommandType.Text;
c.CommandText = SQL;

OracleParameter param = new OracleParameter();
param.Direction = ParameterDirection.Output;
param.OracleType = OracleType.Cursor;
param.ParameterName = "DataOut";
c.Parameters.Add(param);

c.Connection = (OracleConnection) this.GetConnection();

OracleString rowNum = "";
c.ExecuteOracleNonQuery(out rowNum);
// or c.ExecuteReader()
// or use OracleDataAdapter

DataTable returnTable = /* magic goes here */

我可以编辑 SQL,但无法创建函数或过程。 这可能吗?

最佳答案

匿名 PL/SQL block 不返回任何内容,因此您将无法在客户端应用程序中使用在匿名 PL/SQL block 中打开的游标。为了将数据返回给客户端应用程序,您需要使用命名的 PL/SQL block (即存储过程或存储函数)。如果不允许您创建命名的 PL/SQL block ,您将无法将您在 PL/SQL 中打开的游标返回给您的客户端应用程序。

关于c# - 来自普通 SQL 的 Oracle sys_refcursor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10655403/

相关文章:

c# - 从不同的 ViewModel 执行相同的 Prism 命令

C# asp.net 按钮单击事件中的 JavaScript 函数不起作用

c# - 在 NHibernate where 子句中选择 Guid 范围

c# - 如何从 .NET Core 应用程序的其他层访问 IOptions(或任何设置)?

c# - MVC通过@foreach打印出每个Enum值

c# - 可视化 .NET dll 中的类结构

.net - .NET 中的列表是否保持有序?

sql - Oracle PLS-00103 错误。您如何检查现有记录并根据该条件进行更新或插入?

sql - 如何在PL/SQL开发人员的网格输出中设置numwidth?

sql - Oracle 数据库标准版是免费的吗?