Also mit Alter-Trigger wird das nichts werden, denke
ich. Das alte Änderungsspeicher-Problem mit
IB/
FB.
Nach einer Weile ist die Max-Anzahl von Änderungen erreicht
und du müsstest ein Backup-Restore durchführen.
Probier mal den Gedanken:
1. Generator für Boolean-Wert
SQL-Code:
CREATE GENERATOR GEN_TRIGGER_STATUS;
SET GENERATOR GEN_TRIGGER_STATUS TO 0;
2. Schreibe die Prozeduren:
SQL-Code:
CREATE PROCEDURE SET_GENERATOR_TO_MAX_ID
AS
DECLARE VARIABLE MAXID INTEGER;
BEGIN
SELECT MAX(ID) FROM your_table
INTO :MAXID;
SET GENERATOR GEN_DS_ID TO :MAXID;
END
SQL-Code:
Create Procedure SET_TRIGGER_STATUS ( STATUS:SMALLINT)
AS
BEGIN
If (:Status) = 1 then Set Generator GEN_TRIGGER_STATUS TO 1
If (:Status) = 0 then Set Generator GEN_TRIGGER_STATUS TO 0
END
3. Der Trigger sollte so aussehen
SQL-Code:
CREATE TRIGGER DS_BI0
ACTIVE BEFORE INSERT POSITION 0
AS
begin
IF (GEN_ID(GEN_TRIGGER_STATUS,0)=1) THEN
BEGIN
IF (NEW.ID IS NULL) THEN
EXECUTE PROCEDURE SET_GENERATOR_TO_MAX_ID;
NEW.ID = GEN_ID (GEN_DS_ID,1);
END
end
Durch GEN_ID(GEN_TRIGGER_STATUS,0) fragt der Trigger ab, welchen Stand der Generator hat.
Wenn er 1, also True ist, soll der Trigger ausgeführt werden.
In deinem Programm müsstest du nur noch die StoredProc in einem TIBStoredProc ausführen
und den Input-Parameter je nachdem ob der Trigger an oder aus sein soll 1 oder 0 übergeben.