![]() |
BDE Stored Procedure
Hallo Delphi Freunde
Ich stehe vor einem kleinen Problem, denke ich :wall: Ich möchte eine STORED PROCEDURE unter BDE ausführen. Nach Buch muss ich folgendes eingeben.. Datamodule1.Query13.SQL.Clear; Datamodule1.Query13.SQL.Add('EXECUTE PROCEDURE TSW_RESTRICT_SESSION ("enable")'); Datamodule1.Query13.ExecSQL; Ich erhalte immer eine Fehlermeldung von Oracle ORA-00900 invslid SQL-statement. Kann mir da jemand helfen? Ich bin dankbar für jeden Hinweis.... |
Re: BDE Stored Procedure
Hallo tazmania,
zunächst einmal herzlich willkommen im Delphi-PRAXIS Forum. Ich habe zwar noch nicht mit Oracle gearbeitet, aber bei INTERBASE könnte der Fehler dadurch kommen, dass im Dialect 3 für Strings nur noch einzelne Anführungsstriche verwendet werden dürfen. Teste das doch einmal bei dir. |
Re: BDE Stored Procedure
Herzlichen Dank für die Begrüssung :-D
Nun dass dachte ich auch und habe dies auch schon versucht, aber ohne Erfolg. Das Ergebnis bleigt das Selbe. Nun ich arbeite mit Delphi 6 und das Buch ist von Delphi 5, jedoch denke ich nicht dass dies einen Unterschied macht. |
Re: BDE Stored Procedure
Hallo tazmania,
hast du einmal versucht, den SQL String direkt in Oracle zu benutzen? Gibt esvielleicht ein Problem mit Zugriffsrechten? (Insbesondere, wenn es sich um eine Systemtabelle handelt, kannst du wohl nur als Admin darauf zugreifen.) |
Re: BDE Stored Procedure
Kenne Oracle nicht, aber MS-SQL. Dort wird Procedure erzeugt mit
SQL-Code:
Die ParameterListe wird also auch geklammert. In Delphi ruft man das aber ohne die KLlammern auf:
create procedure Name (Parameterliste)
as begin end
Delphi-Quellcode:
Wenn Oracle ähnlich gestrickt ist, könnte das die Lösung sein
Query.SQL.Add('EXECUTE PROCEDURE PROZEDURNAME ''enable''');
Gruß |
Re: BDE Stored Procedure
Hallo Tasmania,
warum benutzt Du für die Stored Procedure nicht ein TStoredProc-Objekt. Die sind doch genau dafür gemacht? |
Re: BDE Stored Procedure
@r_kerber: recht haste, jedoch (soweit ich weis) nur, wenn die StoredProcedure keine Ergebnismenge zurückliefern soll (was in diesem Fall aber nicht der Fall zu sein scheint)
|
Re: BDE Stored Procedure
Zitat:
Zitat:
|
Re: BDE Stored Procedure
Zitat:
Ich benutze den gleichen user wie ich auch mit SQL Plus benutze und in SQL Plus ist der Aufruf: exec TSW_RESTRICT_SESSION.enable und dies funktioniert ohne Probleme |
Re: BDE Stored Procedure
Zitat:
Wenn ich die StoredProc activiere sollte ich im Feld StoredProcName die Auswahl aller verfügbaren Stored Proceduren sehen. Diese ist jedoch dort nicht zu finden. Bin mir nicht sicher ob BDE die richtige Lösung ist. |
Re: BDE Stored Procedure
Liste der Anhänge anzeigen (Anzahl: 1)
Nun bin ich ein bischen weiter gekommen.
folgender Code habe ich jetzt.... Datamodule1.StoredProc1.StoredProcName := 'TSW_RESTRICT_SESSION'; Datamodule1.StoredProc1.Params[0].AsString := 'enable'; Datamodule1.StoredProc1.Prepare; Datamodule1.StoredProc1.ExecProc; Irgend wie erhalte ich jetzt eine Key violation. Es schein mir fast als wolle Delphi diese Procedure neu kompilieren. Die Fehlermeldung habe ich in denn Anhang gestellt. |
Re: BDE Stored Procedure
Hallo tazmania,
hab's gerade ausprobiert. Bei mir werden die Stored Procedures angezeigt. Ich bin mir nicht ganz sicher, ich glaube es liegt u.a. daran, dass ich mit TSession arbeite. Probiere das mal aus. Und noch etwas, bei mir steht vor dem dem Prozedur-namen auch noch der Owner (bzw. der Name eines Users, dem diese par "Alias" bekannt gemach wurde): ASPFLV.TAKE_DID |
Re: BDE Stored Procedure
Ich sehe schon einige Proceduren jedoch diese nicht.
Ich werden mal ds mit dem Schema versuchen. Was meinst du unter TSession? |
Re: BDE Stored Procedure
Hallo allerseits,
einen Prozeduraufruf wie diesen:
SQL-Code:
gibt es meines Wissens in Oracle nicht.(Zumindest ist enable kein Parameter)
exec TSW_RESTRICT_SESSION.enable
TSW_RESTRICT_SESSION muss demnach ein Oracle Package sein, und enable eine Procedure dieses Packages. Es kann aber auch ein Synonym sein, das auf ein Package eines anderen Users zeigt. In diesem Fall kannst du mit der StroedProc Komponente die Prozedur folgendermassen aufrufen:
Delphi-Quellcode:
Wenn du viel mit Oracle arbeitest, dann wirst du mit der BDE ziemlich schnell auf Grenzen stoßen. z.B. kannst du keine PLSQL Blöck oder DDL Anweisungen absetzen. Auch der Zugriff auf Blobs, CLOBS, BFILES u.dgl. ist nicht möglich. usw, usw, usw....
Datamodule1.StoredProc1.StoredProcName := 'TSW_RESTRICT_SESSION.ENABLE';
Datamodule1.StoredProc1.Prepare; Datamodule1.StoredProc1.ExecProc; Ich kann dir nur die Zugriffskomponenten Direct Oracle Access von ![]() Damit ist so gut wie alles möglich. |
Re: BDE Stored Procedure
Zitat:
|
Re: BDE Stored Procedure
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Gary,
Ja, es ist ein Oracle Package und enable sowie disable und show sindProceduren. Nun ich habe folgendes ausgeführt.....
Delphi-Quellcode:
Ich erhalte jetzt folgende Fehlermeldung (Anhang).
Datamodule1.StoredProc1.StoredProcName := 'TSW_RESTRICT_SESSION.ENABLE';
Datamodule1.StoredProc1.Prepare; Datamodule1.StoredProc1.ExecProc; Ich denke jetzt muss ich mit einem DBA Kontackt aufnehmen. |
Re: BDE Stored Procedure
Hallo tazmania,
das Problem hatte ich auch schon mal. Offensichtlich lassen sich Oracle-Packages nicht so aufrufen wie "normale" Stored Procedures. Ich habe es dann aufgegeben. Falls Du jedoch die Möglichkeit hast eine Stored Procedure zu schreiben, die dann die Funktion aus dem Package aufruft, dann solltest Du dies mal probieren. |
Re: BDE Stored Procedure
Hallo,
diese Meldung bekommst du, wenn das betreffende Package gerade ungültig ist. Wenn das Package keinen Fehler hat, dann brauchst du es nur neu Compilieren.
SQL-Code:
Alter Package TSW_RESTRICT_SESSION compile;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:12 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