Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi BDE Stored Procedure (https://www.delphipraxis.net/9615-bde-stored-procedure.html)

tazmania 30. Sep 2003 10:24


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....

MrSpock 30. Sep 2003 11:58

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.

tazmania 30. Sep 2003 12:43

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.

MrSpock 30. Sep 2003 18:48

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.)

Leuselator 1. Okt 2003 03:59

Re: BDE Stored Procedure
 
Kenne Oracle nicht, aber MS-SQL. Dort wird Procedure erzeugt mit
SQL-Code:
create procedure Name (Parameterliste)
as
begin
end
Die ParameterListe wird also auch geklammert. In Delphi ruft man das aber ohne die KLlammern auf:

Delphi-Quellcode:
Query.SQL.Add('EXECUTE PROCEDURE PROZEDURNAME ''enable''');
Wenn Oracle ähnlich gestrickt ist, könnte das die Lösung sein
Gruß

r_kerber 1. Okt 2003 06:44

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?

Leuselator 1. Okt 2003 06:46

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)

r_kerber 1. Okt 2003 07:11

Re: BDE Stored Procedure
 
Zitat:

Zitat von Leuselator
jedoch (soweit ich weis) nur, wenn die StoredProcedure keine Ergebnismenge zurückliefern soll

Aus der OH:
Zitat:

Abhängig von der Server-Implementation kann eine Stored Procedure entweder einzelne Werte oder eine Ergebnismenge zurückgeben, ähnlich der von einer Abfrage zurückgegebenen Menge.

tazmania 1. Okt 2003 08:16

Re: BDE Stored Procedure
 
Zitat:

Zitat von MrSpock
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.)

Hallo MrSpock
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

tazmania 1. Okt 2003 08:34

Re: BDE Stored Procedure
 
Zitat:

Zitat von r_kerber
Zitat:

Zitat von Leuselator
jedoch (soweit ich weis) nur, wenn die StoredProcedure keine Ergebnismenge zurückliefern soll

Aus der OH:
Zitat:

Abhängig von der Server-Implementation kann eine Stored Procedure entweder einzelne Werte oder eine Ergebnismenge zurückgeben, ähnlich der von einer Abfrage zurückgegebenen Menge.

Hallo r_kerber
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.

tazmania 1. Okt 2003 11:26

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.

r_kerber 1. Okt 2003 12:50

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

tazmania 2. Okt 2003 07:31

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?

Garby 2. Okt 2003 11:09

Re: BDE Stored Procedure
 
Hallo allerseits,

einen Prozeduraufruf wie diesen:
SQL-Code:
exec TSW_RESTRICT_SESSION.enable
gibt es meines Wissens in Oracle nicht.(Zumindest ist enable kein Parameter)

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:
Datamodule1.StoredProc1.StoredProcName := 'TSW_RESTRICT_SESSION.ENABLE';
Datamodule1.StoredProc1.Prepare;
Datamodule1.StoredProc1.ExecProc;
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....

Ich kann dir nur die Zugriffskomponenten Direct Oracle Access von Allroundautomations empfehlen.
Damit ist so gut wie alles möglich.

r_kerber 2. Okt 2003 12:00

Re: BDE Stored Procedure
 
Zitat:

Zitat von tazmania
Was meinst du unter TSession?

Die TSession-Komponente von Delphi. Eine in's Datamodule ziehen, benamsen und bei allen anderen DB-Komponenten diese TSession auswählen. Das war aber nur so'n Strohhalm.

tazmania 3. Okt 2003 09:34

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:
   Datamodule1.StoredProc1.StoredProcName := 'TSW_RESTRICT_SESSION.ENABLE';
   Datamodule1.StoredProc1.Prepare;
   Datamodule1.StoredProc1.ExecProc;
Ich erhalte jetzt folgende Fehlermeldung (Anhang).
Ich denke jetzt muss ich mit einem DBA Kontackt aufnehmen.

r_kerber 3. Okt 2003 16:27

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.

Garby 16. Okt 2003 09:55

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