Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Oracle Stored Function mit ADO (https://www.delphipraxis.net/162442-oracle-stored-function-mit-ado.html)

egentur 23. Aug 2011 10:17

Datenbank: Oracle • Version: 11g • Zugriff über: ADO

Oracle Stored Function mit ADO
 
Hallo
Ich habe auf einer KundenDB eine Stored Function
XYZ(X1 in varchar2, X2 in varchar2 ) return varchar2

der Auruf mit TAdoQuery 'select XYZ('a','b') from DUAL'
funktioniert leider nicht, da die Function innerhalb Updates, Inserts etc. hat.
Mit PL/SQL kann ich die Function testen mit

begin
:result := XYZ(X1 => :X1, X2 => :X2);
end;

Die Parameter :X1 und :X2 werden abgefragt.

Meine Frage nun: wie kann ich dieses SQL in Delphi 2009 mit ADO umsetzen ?

Bernhard Geyer 23. Aug 2011 10:32

AW: Oracle Stored Function mit ADO
 
Welcher ADO-Provider. Der von MS ist Schrott und ist von MS abgekündigt.

egentur 23. Aug 2011 10:48

AW: Oracle Stored Function mit ADO
 
Ist der Oracle Provider for OLEDB

Bernhard Geyer 23. Aug 2011 10:50

AW: Oracle Stored Function mit ADO
 
Wie zeigt sich der Fehler? Fehlermeldung?

egentur 23. Aug 2011 11:11

AW: Oracle Stored Function mit ADO
 
ORA-14551: cannot perform a DML operation inside a query

was ja auch richtig ist, deshalb benötige ich ja den Aufruf in der anderen Art

jaevencooler 23. Aug 2011 11:31

AW: Oracle Stored Function mit ADO
 
Moin, Moin,

ich bi jetzt nicht so der ADO Profi, aber ich denke mal so könnte es funktionieren:

Delphi-Quellcode:

  Query.DeclareVariable('function_result', otFloat); // Hier wird das Ergebnis der Funktion gespeichert
  Query.DeclareVariable('APROJECTID', otFloat);     // Variablen deklarieren, wie das genau in ADO geht weißt Du sicher besser als ich
  Query.SetVariable('APROJECTID', Aprojectid);      // Variablenwerte setzen
  Query.DeclareVariable('AERRORMESSAGE', otString);
  Query.DeclareVariable('AERRORSQLSTMNT', otString);
  // PL/SQL Block, hier kannst Du auch mit in und out Variablen arbeiten
  Query.SQL.Add('begin');
  Query.SQL.Add(' :function_result := "PPLA_ROUTINEN"."COPYPROJECT"(');
  Query.SQL.Add('   APROJECTID => :APROJECTID,');
  Query.SQL.Add('   AERRORMESSAGE => :AERRORMESSAGE,');
  Query.SQL.Add('   AERRORSQLSTMNT => :AERRORSQLSTMNT);');
  Query.SQL.Add('end;');
  Query.Execute;
 
  Result        := ConvertVariant(OCPQuery.GetVariable('function_result'));
  Aerrormessage := ConvertVariant(OCPQuery.GetVariable('AERRORMESSAGE'));
  Aerrorsqlstmnt := ConvertVariant(OCPQuery.GetVariable('AERRORSQLSTMNT'));
wichtig ist eben das Du das ganze als PL/SQL Block übergibst, und nicht als ein Select


Gruß
Michael


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz