REF cursor for ver 3... is easy.
It is example for DOA ver 3... :
tech_pkg.getConsColumns - returns Ref cursor
You create 2 cursors : qCursor and CursorQuery.
qCursor -
with qCursor do begin
Close; CursorQuery.Close;
Clear;
SQL.Add('begin');
SQL.Add(' tech_pkg.getConsColumns

p_Colcursor,

_const_name);');
SQL.Add('end;');
DeclareVariable('p_Colcursor', otCursor);
DeclareVariable('p_const_name', otString);
SetComplexVariable('p_Colcursor', CursorQuery); // Binding queries
SetVariable('p_const_name', ConstraintName);
Execute;
end;
-- then simple Open result cursor.
with CursorQuery do begin
Execute;
while not Eof do begin
if Length(dfs) > 0 then
dfs := dfs + ';' + FieldAsString(0)
else
dfs := FieldAsString(0);
if Length(mfs) > 0 then
mfs := mfs + ';' + FieldAsString(1)
else
mfs := FieldAsString(1);
if Length(sKeyWhere) > 0 then sKeyWhere := sKeyWhere + ' AND ';
sKeyWhere := sKeyWhere + dfs + '=

' + FieldAsString(0);
if Length(sUpd) > 0 then sUpd := sUpd + ',';
sUpd := sUpd + dfs + '= :' + FieldAsString(0);
if Length(sw) > 0 then
sw := sw + ' AND ';
sw := sw + FieldAsString(0) + '= :' +FieldAsString(0);
qtable.DeclareVariable(FieldAsString(0), otInteger);
Next;
end;
Close;
qCursor.Close;
if Length(sw) > 0 then
qtable.SQL.Add('WHERE '+ sw);
qTable.MasterFields := mfs;
qTable.DetailFields := dfs;
end;