Discussion:
Abfrage einer Stored Procedure einer Oracle 10g Datenbank die einen Ref Cursor zurückgibt
(zu alt für eine Antwort)
Daniel Wetzler
2011-07-21 09:29:49 UTC
Permalink
Liebe Delphi Experten,

ich habe auf meiner Datenbank im Package RC_COMMUNICATION folgende
Prozedur :

procedure getCurrProdValuestoRC (out_values OUT output) is
prm_number_DS_check number;
prm_present_status number;
out_status number;
begin

....... PL/SQL coding ist unwichtigt funktioniert aber (im
sqldeveloper geprüft) .....

end getCurrProdValuestoRC;

Dabei ist output ein Refcursor.

Diese Prozedur versuche ich mit Delphi 7 mit Hilfe der ADO Komponente
aufzurufen.
Dazu habe ich folgendes geschrieben :


with ADOStoredProc1 do begin
//ProcedureName := 'USER_ACCESS.getPresentStatus';
ProcedureName := 'RC_COMMUNICATION.getCurrProdValuestoRC';
Parameters.clear ;
Parameters.CreateParameter('out_Client_Status', ftCursor, pdOutput, 0,
0);
ExecProc ; //fire the procedure
end; // with

Sobald ich den Code ausführe erhalte ich die Fehlermeldung :


"Parameterobjekt ist nicht ordnungsgemäss definiert."

Bei einigen Recherchen habe ich gelsen, dass dies daran liegen könnte
das das Mapping ADO<->Oracle in Delphi 7 falsch ist und habe folgendes
ausprobiert :


Parameters.CreateParameter('out_Client_Status', ftUnknown, pdOutput,
0, 0);

leider mit dem gleichen Ergebnis.

Kann mir einer von Euch einen Hinweis geben, was ich falsch mache ?

Viele Grüße,

Daniel
Stefan Graf
2011-07-21 16:45:21 UTC
Permalink
Post by Daniel Wetzler
Liebe Delphi Experten,
ich habe auf meiner Datenbank im Package RC_COMMUNICATION folgende
procedure getCurrProdValuestoRC (out_values OUT output) is
prm_number_DS_check number;
prm_present_status number;
out_status number;
begin
....... PL/SQL coding ist unwichtigt funktioniert aber (im
sqldeveloper geprüft) .....
end getCurrProdValuestoRC;
Dabei ist output ein Refcursor.
Diese Prozedur versuche ich mit Delphi 7 mit Hilfe der ADO Komponente
aufzurufen.
with ADOStoredProc1 do begin
//ProcedureName := 'USER_ACCESS.getPresentStatus';
ProcedureName := 'RC_COMMUNICATION.getCurrProdValuestoRC';
Parameters.clear ;
Parameters.CreateParameter('out_Client_Status', ftCursor, pdOutput, 0,
0);
ExecProc ; //fire the procedure
end; // with
"Parameterobjekt ist nicht ordnungsgemäss definiert."
Bei einigen Recherchen habe ich gelsen, dass dies daran liegen könnte
das das Mapping ADO<->Oracle in Delphi 7 falsch ist und habe folgendes
Parameters.CreateParameter('out_Client_Status', ftUnknown, pdOutput,
0, 0);
leider mit dem gleichen Ergebnis.
Kann mir einer von Euch einen Hinweis geben, was ich falsch mache ?
Viele Grüße,
Eine Funktion, welche ein REF-Cursor zurück gibt, rufe ich so auf:

with TADOCommand.Create(Self) do begin
Connection := xxx;

CommandText := 'PA_xxxx.GetCursor';
CommandType := cmdStoredProc;

Parameters.CreateParameter('pID', ftString, pdInput, 32, ID);
Parameters.CreateParameter('pApp', ftString, pdInput, 32, App);

Prepared := False;

RefDataSet.Recordset := Execute;

RefDataSet.First;

while not (RefDataSet.Eof) do begin
......

RefDataSet.Next;
end;
end;

Wichtig ist, in der AD-Connect-Definition den Parameter PLSQLRSet=1
anzugeben, sonst geht es nicht.

Läuft seit 9i mit Delphi 7 bis 11g mit Delphi 2007
--
Stefan Graf
Perlsau
2011-07-22 02:22:52 UTC
Permalink
Post by Daniel Wetzler
Liebe Delphi Experten,
ich habe auf meiner Datenbank im Package RC_COMMUNICATION folgende
Crosspost in:
http://www.delphi-forum.de/topic_Abfrage+einer+Stored+Procedure+einer+Oracle+10g+Datenbank+u_106363,0.html


Crossposts sind nicht gerne gesehen, weil so zahlreiche Entwickler
mehrmals dieselbe Anfrage vorgesetzt bekommen. Poste in einem einzige
Forum, dort erreichst du gewöhnlich alle kompetenten Fachleute.
Informiere dich darüber, in welchen Foren welche Themen behandelt werden
und wähle so das Forum für dein spezielles Problem aus.

Lesen Sie weiter auf narkive:
Loading...