3

私は次のような(簡略化された)OracleSQLを持っています:

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を編集できますが、関数やプロシージャを作成できません。これは可能ですか?

4

2 に答える 2

2

匿名PL/SQLブロックは何も返さないため、クライアントアプリケーションの匿名PL/SQLブロックで開いたカーソルを使用することはできません。データをクライアントアプリケーションに返すには、名前付きPL / SQLブロック(つまり、ストアドプロシージャまたはストアド関数)を使用する必要があります。名前付きPL/SQLブロックの作成が許可されていない場合、PL/SQLで開いたカーソルをクライアントアプリケーションに戻すことはできません。

于 2012-05-20T21:32:02.993 に答える
0
select cursor(select * from dual) from dual;
于 2012-05-22T04:30:58.050 に答える