Einzelnen Beitrag anzeigen

Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Kein Zugriff auf Oracle Stored Proc mit Resultset

  Alt 29. Apr 2006, 14:02
Nehmen wir so ein Package:
SQL-Code:
create or replace package EinPackage is
  type TTestCursor is ref cursor return Test%RowType;
  subtype TId is Test.Id%Type;

  function TestProc(id in TId) return TTestCursor;
end;

create or replace package body EinPackage is

function TestProc(id in TId) return TTestCursor is
  Result TTestCursor;
begin
  open Result for
    SELECT *
    FROM Test t
    WHERE t.Id = id;

  return Result;
end;

end;
Du könntest es als normales AdoCommand absetzen:
begin :cursor := EinPackage.TestProc(:Id); end; Oder als SProc mit "EinPackage.TestProc" als CommandText.

Ich habe keinerlei IDE hier und meine Erfahrungen mit dem alten, OLe-basierten ADO halten sich in Grenzen, aber so hätte ich es versucht und hätte auch erwartet dass es geht.
Es ist aber gut möglich, dass ADO keine Entsprechung für eine Cursor referenz hat.

Dann müsstest du ein wenig umbauen:
SQL-Code:
create or replace package EinPackage is
  type TTestEntry is Test%RowType;
  type TTestEntryList is table of TTestEntry;
  subtype TId is Test.Id%Type;

  function TestProc(id in TId) return TTestEntryList;
end;

create or replace package body EinPackage is

function TestProc(id in TId) return TTestEntryList
is
  Result TTestEntryList;
begin
  SELECT * BULK COLLECT
  INTO Result
  FROM Test t
  WHERE t.Id = id;

  return Result;
end;

end;
Ausführen könntest du es so:
SQL-Code:
SELECT *
FROM table(EinPackage.TestProc(1111))
Das alte ADO und Oracle ist aber wirklich eine ziemlich zickige und nervige Kombi (Du weißt, dass Ora XYZ kann, aber du weißt auch, dass ADO zu blöd dafür ist )
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat