我有一个像这样的存储过程
PROCEDURE PRC_ABCD (resultset_out out TYPES.cursorType)
AS
SELECT * FROM ABCD;
END PRC_ABCD ;
我的C#代码就像这样
string cnn = "connectionstring";
OracleConnection conn = new OracleConnection(cnn);
conn.Open();
var cmd = adapter.CreateSpCommand(con, "PRC_ABCD");
cmd = adapter.outField(cmd, "resultset_out", OracleDbType.RefCursor);
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
yield return Total.FromDataReader(reader, vProductCount, vProductAreaCount, vMonitoredByCount, customerCount);
}
}
我的问题是如何在控制台消息中看到PRC_ABCD
的结果,或者如何打印查询SELECT * FROM ABCD
?有人对此有任何信息吗?
答案 0 :(得分:0)
返回引用游标的函数可能更容易使用:
SQL> create table abcd as
2 select employee_id, first_name, salary from employees
3 where rownum <= 5;
Table created.
SQL> create or replace function f_abcd
2 return sys_refcursor
3 is
4 cur_r sys_refcursor;
5 begin
6 open cur_r for select * from abcd;
7 return cur_r;
8 end;
9 /
Function created.
SQL> select f_abcd from dual;
CURSOR STATEMENT : 1
CURSOR STATEMENT : 1
100 Steven 24000
101 Neena 17000
102 Lex 17000
103 Alexander 9000
104 Bruce 6000
但是,如果您必须使用某个程序,那么您可以执行以下操作:
SQL> create or replace procedure p_abcd (par_out out sys_refcursor)
2 is
3 begin
4 open par_out for select * from abcd;
5 end;
6 /
Procedure created.
SQL> var l_out refcursor;
SQL> begin p_abcd(:l_out); end;
2 /
PL/SQL procedure successfully completed.
SQL> print :l_out
100 Steven 24000
101 Neena 17000
102 Lex 17000
103 Alexander 9000
104 Bruce 6000
SQL>
不幸的是,那是我达到极限的地方;我对C#或asp.net一无所知,所以我无法向您展示如何在这些语言中使用上述代码。遗憾。