Oracle sys_refcursor来自普通 SQL
本文关键字:SQL sys refcursor Oracle | 更新日期: 2023-09-27 18:34:47
我有一个(简化的(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 中的数据表。
我一直在尝试各种方法,但似乎无法访问 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 块不返回任何内容,因此您将无法使用在客户端应用程序的匿名 PL/SQL 块中打开的游标。 为了将数据返回到客户端应用程序,您需要使用命名的PL/SQL块(即存储过程或存储函数(。 如果不允许创建命名的 PL/SQL 块,则无法将您在 PL/SQL 中打开的游标返回到客户端应用程序。
select cursor(select * from dual) from dual;