![]() |
Datenbank: Interbase • Version: 5 • Zugriff über: intern
Generator zurücksetzen aus StoredProcedure
Hallo DP'ler.
Wieder mal ein Problem mit Stored Procedure Ich würde gerne mit einer Procedur alle Datensätze einer Veranstaltung aus der Datenbank löschen, was auch schon läuft. Nun kommt das Problem. Um den Generator für die DS ID nicht unnötig zu erhöhen, wollte ich nach dem Löschen, den Generator auf den nächsten verfügbaren Wert setzen. Leider meckert Interbase rum und meint das er das Kommando nicht kennt. Wie ist der korrekte Syntax?
SQL-Code:
Ach ja wenn es weiterhilft, die Fehlermeldung lautet:
SET TERM ^ ;
/* Stored procedures */ CREATE PROCEDURE RESETRUNS ( EVENTID INTEGER ) AS DECLARE VARIABLE NewGen INT; BEGIN DELETE FROM RUNS WHERE (RUN_EVENT =:EVENTID); SELECT MAX(RUN_ID)+1 FROM RUNS INTO :NewGen ; /* hier kommt der Fehler */ SET GENERATOR GEN_RUN TO :NewGen; END ^ SET TERM ; ^
SQL-Code:
Vielen Dank!
Dynamic SQL Error
SQL error code = -104 Token unknown - line 10, char 1 SET ... |
Re: Generator zurücksetzen aus StoredProcedure
mal davon abgesehen, dass ich so eine Generatorveränderung nicht machen würde, lautet die korrekte Syntax in deinem fall:
SQL-Code:
gen_id (GEN_RUNS, -(gen_id(GEN_RUNS, 0)- :NewGen));
|
Re: Generator zurücksetzen aus StoredProcedure
Hey Danke für die schnelle Antwort.
Ich habe die Procedur nun so geändert. Aber die IB Console meckert immer noch, wenn ich dieses Statement in der IB-Console eingebe:
SQL-Code:
Fehlermeldung ist
COMMIT WORK;
SET AUTODDL OFF; SET TERM ^ ; /* Stored procedures */ ALTER PROCEDURE RESETRUNS ( EVENTID INTEGER ) AS DECLARE VARIABLE NewGen INT; BEGIN DELETE FROM RUNS WHERE (RUN_EVENT =:EVENTID); SELECT MAX(RUN_ID)+1 FROM RUNS INTO :NewGen ; /* SET GENERATOR GEN_RUN TO :NewGen; */ /* immer noch Fehlermeldung */ GEN_ID (GEN_RUNS, :NewGen); GEN_ID (GEN_RUNS, 0); END ^ SET TERM ; ^ COMMIT WORK; SET AUTODDL ON;
Code:
Lt. F1 soll aber der Syntax bekannt sein, um einen Generator zu setzen. Somit bin ich leider genauso weit wie bisher.
Dynamic SQL Error
SQL error code = -104 Token unknown - line 10, char 1 [b]gen_id[b] Noch was anderes, warum sollte man den Generator nicht zurücksetzen. Diese Tabelle beinhaltet immer nur die Datensätze für eine Veranstaltung. Ist die Veranstaltung abgeschlossen, werden diese wieder gelöscht. Bei der nächsten Veranstaltung werden sie wieder neu generiert. |
Re: Generator zurücksetzen aus StoredProcedure
Hallo,
in der Firebird-Doku 2.0 steht: Zitat:
Du kannst es also nur manuell erledigen, aber nicht aus einer SP heraus. Gruß Jürgen |
Re: Generator zurücksetzen aus StoredProcedure
OK. :gruebel:
Trotzdem ein kleines Aufbäumen; In der Online Hilfe der IB Console zu SQL steht: Zitat:
Da muss ich mir wohl doch was anderes überlegen... :wall: |
Re: Generator zurücksetzen aus StoredProcedure
Sorry, ich hatte vergessen, dass Funktionen auch einer Variablen zugewiesen werden müssen.
So sollte es nun funktionieren:
SQL-Code:
COMMIT WORK;
SET AUTODDL OFF; SET TERM ^ ; /* Stored procedures */ ALTER PROCEDURE RESETRUNS ( EVENTID INTEGER ) AS DECLARE VARIABLE NewGen INT; DECLARE VARIABLE NEWID INTEGER; BEGIN DELETE FROM RUNS WHERE (RUN_EVENT =:EVENTID); SELECT MAX(RUN_ID)+1 FROM RUNS INTO :NewGen ; /* SET GENERATOR GEN_RUN TO :NewGen; */ NEWID = GEN_ID (GEN_RUNS, -(GEN_ID (GEN_RUNS, 0) - :NewGen)); ; END ^ SET TERM ; ^ COMMIT WORK; SET AUTODDL ON; |
Re: Generator zurücksetzen aus StoredProcedure
@TBx
:wall: Danke da hätte ich auch selber drauf kommen können! Manchmal ist man so verbohrt in eine Lösung, das man den Wald nicht vor lauter Bäumen sieht. Noch mal zurück zu deiner Aussage, das du das so nicht machen würdest. Kannst du mir kurz erklären warum? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:23 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