Delphi-PRAXiS
Seite 1 von 2  1 2      

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

ibp 9. Mär 2011 15:59

Datenbank: interbase • Version: 6.5 • Zugriff über: BDE

Stored Procedure updaten
 
Hi,
hier mal wieder Fragen an die allwissende Gemeinde.

Ich versuche mittels einem Query eine SP aus dem Programm heraus zu aktualisieren.

Wenn die SP neue Variablen enthält, dann schlägt leider die Aktualisierung fehl.

Code:
query.sql.add('ALTER PROCEDURE');
query.sql.add('MYPROCEDURE (');
query.sql.add('   MYINPUTSTR varchar(32),');
query.sql.add('   MYINPUTINT integer)');
query.sql.add('returns (');
query.sql.add('   OUTPUT smallint)');
query.sql.add('as');
query.sql.add('declare variable MYVARINTERN integer;');
query.sql.add('BEGIN');
...
query.sql.add('   SUSPEND;');
query.sql.add('END');

query.ExecSQL;
SP löschen und neu erstellen lassen ist leider keine Option.

Das komische ist, wenn ich den gleichen Text in eine Abfrage von ibexpert packe, dann funktioniert der Update.


Hat jemand eine Idee warum das so ist und wie ich das abstellen kann?

vg ibp

p80286 9. Mär 2011 17:02

AW: Stored Procedure updaten
 
Code:
create or replace
ist keine Alternative?

Gruß
K-H

shmia 9. Mär 2011 17:06

AW: Stored Procedure updaten
 
Zitat:

Zitat von ibp (Beitrag 1087048)
Wenn die SP neue Variablen enthält, dann schlägt leider die Aktualisierung fehl.

Mit welcher Fehlermeldung?

http://www.chiark.greenend.org.uk/~s...m/bugs-de.html

ibp 9. Mär 2011 17:15

AW: Stored Procedure updaten
 
Zitat:

Zitat von p80286 (Beitrag 1087062)
Code:
create or replace
ist keine Alternative?

Create nein, da die SP schon vorhanden. REPLACE PROCEDURE gibt es bei interbase nicht.


Zitat:

Zitat von shmia (Beitrag 1087063)
Zitat:

Zitat von ibp (Beitrag 1087048)
Wenn die SP neue Variablen enthält, dann schlägt leider die Aktualisierung fehl.

Mit welcher Fehlermeldung?

http://www.chiark.greenend.org.uk/~s...m/bugs-de.html

"Allgemeiner SQL-Fehler, Token unknown -line xx, char yy"

unter line xx char yy steht innerhalb der Prozedur der Variablename, die zusätzlich neu definiert wurde.

Die grundsätzliche SP ist ja ok und läuft.

shmia 9. Mär 2011 17:38

AW: Stored Procedure updaten
 
Ändere mal deinen Code so ab:
Delphi-Quellcode:
  query.sql.add('ALTER PROCEDURE');
  query.sql.add('MYPROCEDURE (');
  ...
  query.sql.add('  SUSPEND;');
  query.sql.add('END');
  Assert(query.ParamCount=0, 'Parameter nicht erlaubt');
try
  query.ExecSQL;
except
  on E:Exception do
  begin
    E.Message := E.Message +#13#10+query.SQL.Text;
    raise;
end;
Nur um 150%ig sicher zu gehen, dass dein SQL-Kommando in Ordnung ist und du nicht die berühmt-berüchtigten Tomaten auf den Augen hast.

PS:
wenn das Alles nicht hilft, dann würde ich mal versuchen, den SQL-Befehl direkt
über die Database-Komponente abzuschicken:

Delphi-Quellcode:
sql:string;

sql := 'ALTER PROCEDURE'#13#10+
  'MYPROCEDURE ('#13#10+
...
  ;
  Database1.Execute(sql);

ibp 9. Mär 2011 18:07

AW: Stored Procedure updaten
 
Zitat:

Zitat von shmia (Beitrag 1087077)
Ändere mal deinen Code so ab:
Delphi-Quellcode:
  query.sql.add('ALTER PROCEDURE');
  query.sql.add('MYPROCEDURE (');
  ...
  query.sql.add('  SUSPEND;');
  query.sql.add('END');
  Assert(query.ParamCount=0, 'Parameter nicht erlaubt');
try
  query.ExecSQL;
except
  on E:Exception do
  begin
    E.Message := E.Message +#13#10+query.SQL.Text;
    raise;
end;
Nur um 150%ig sicher zu gehen, dass dein SQL-Kommando in Ordnung ist und du nicht die berühmt-berüchtigten Tomaten auf den Augen hast.

jupp so mache ich das ja auch :wink: wollte hier nur nicht allen Ballast mit posten. Ich habe die SP vor und zurück kontrolliert, mit der ist alles ok.
Zitat:

Zitat von shmia (Beitrag 1087077)
PS:
wenn das Alles nicht hilft, dann würde ich mal versuchen, den SQL-Befehl direkt
über die Database-Komponente abzuschicken:

Delphi-Quellcode:
sql:string;

sql := 'ALTER PROCEDURE'#13#10+
  'MYPROCEDURE ('#13#10+
...
  ;
  Database1.Execute(sql);

ok, das werde ich mal versuchen....

Lemmy 10. Mär 2011 09:03

AW: Stored Procedure updaten
 
Hi,

was du auch versuchen kannst: über query.sql.SaveToFile() das Statement speichern und in IBExpert ausführen. Wenn da doch ein Tippfehler drin ist, findest DU den so am schnellsten. Anschließend halt nicht vergessen das SaveToFile wieder auszubauen...

Grüße

ibp 10. Mär 2011 09:12

AW: Stored Procedure updaten
 
Zitat:

Zitat von Lemmy (Beitrag 1087208)
Hi,

was du auch versuchen kannst: über query.sql.SaveToFile() das Statement speichern und in IBExpert ausführen. Wenn da doch ein Tippfehler drin ist, findest DU den so am schnellsten. Anschließend halt nicht vergessen das SaveToFile wieder auszubauen...

Grüße

Danke, habe ich aber schon gemacht, daher kann ich mir sehr sicher sein, dass die SP OK ist!

mjustin 10. Mär 2011 15:37

AW: Stored Procedure updaten
 
Nur eine Idee:

wenn man mit IBExpert ein Matadata Extract durchführt, kann man bei Stored Procedures gut sehen, dass zuerst der Statement Delimiter von ';' auf '^' umgesetzt wird, damit man im alter procedure statement das Semikolon als Anweisungstrenner verwenden kann. Und dann muss am Ende des Prozedurtextes das ^ stehen, also

Delphi-Quellcode:
alter procedure x
begin
  suspend;
end^  <<---

ibp 10. Mär 2011 17:37

AW: Stored Procedure updaten
 
komisch anscheinend liegt es nicht am update der variablen der SP.

Er meckert immer die erste Benutzung der Variablen an, aber nicht die Input- oder Output-Variablen. :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:10 Uhr.
Seite 1 von 2  1 2      

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