![]() |
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 ? |
AW: Oracle Stored Function mit ADO
Welcher ADO-Provider. Der von MS ist Schrott und ist von MS abgekündigt.
|
AW: Oracle Stored Function mit ADO
Ist der Oracle Provider for OLEDB
|
AW: Oracle Stored Function mit ADO
Wie zeigt sich der Fehler? Fehlermeldung?
|
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 |
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:
wichtig ist eben das Du das ganze als PL/SQL Block übergibst, und nicht als ein SelectQuery.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')); Gruß Michael |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz