using multiple cursors possible?

Hello all,
we utilize DAO and rely heavily on PLSQL procedures out-returning ref cursors (type p1). I am curious if it is possible to use procedures returning more than one ref cursor (types p2 and p3) with DAO.
I attach a codes snipplet illustrating the problem from the PLSQL point of view:

Code:
create or replace package p_test as
  type t_rc is ref cursor;
  procedure p1(c1 out t_rc);
  procedure p2(c1 out t_rc, c2 out t_rc);
  procedure p3(c1 out t_rc);
end;
/
show err
create or replace package body p_test as
  procedure p1(c1 out t_rc)
  as
  begin
    open c1 for select 'hallo' from dual;
  end;
  procedure p2 (c1 out t_rc, c2 out t_rc)
  as
  begin
    open c1 for select 'hallo' from dual;
    open c2 for select 'zenek' from dual;
  end;
  procedure p3(c1 out t_rc)
  as
  begin
    open c1 for
    select
      cursor(select 'hallo' from dual) c1
      , cursor(select 'zenek' from dual) c2
    from
     dual;
  end;
end;
/
show err
 
type
TOracleCursorDataSet = class(TOracleDataset)
protected
fCursorQuery: TOracleQuery;

function CreateInternalQuery: TOracleQuery; override;
public
property CursorQuery: TOracleQuery read fCursorQuery;
end;

function TOracleCursorDataSet.CreateInternalQuery: TOracleQuery;
begin
fCursorQuery := inherited CreateInternalQuery;
Result := fCursorQuery;
end;

vOracleDataSet := TOracleDataSet.Create(...
vOracleDataSet.SQL.Text := 'begin p_test.p2(:CUR1, :CUR2); end;';

vOracleCursor1 := TOracleCursorDataSet.Create(...
vOracleCursor1.Session := vOracleDataSet.Session;
vOracleDataSet.SetComplexVariable('CUR1', vOracleCursor1.CursorQuery );

vOracleCursor2 := TOracleCursorDataSet.Create(...
vOracleCursor2.Session := vOracleDataSet.Session;
vOracleDataSet.SetComplexVariable('CUR2', vOracleCursor2.CursorQuery );

vOracleDataSet.Execute();

vOracleCursor1.Open;
vOracleCursor2.Open;
 
Back
Top