Seite 1 von 1

CASE WHEN in Triggern möglich?

Verfasst: Do 19. Sep 2019, 13:55
von martin.koeditz
Hallo zusammen,

kann ich Fallunterscheidungen mittels CASE WHEN in Triggern nutzen? Ich versuche etwas in dieser Art:

Code: Alles auswählen

CREATE OR ALTER TRIGGER TBL_DOC_NUMBER_BIU FOR TBL_DOC ACTIVE
BEFORE INSERT OR UPDATE POSITION 10000
AS
BEGIN
	CASE NEW.DOC_TYPE_ID
        	WHEN 100 THEN NEW.ITEM_INTERNAL_NO = 'xyz';
        	WHEN 200 THEN NEW.ITEM_INTERNAL_NO = 'abc';
        	WHEN 300 THEN NEW.ITEM_INTERNAL_NO = 'def;
                ELSE NEW.ITEM_INTERNAL_NO = null;                    
END			            
Dank und Gruß
Martin

Re: CASE WHEN in Triggern möglich?

Verfasst: Do 19. Sep 2019, 17:01
von bfuerchau
Ich sehe da nun keinen Hinderungsgrund, da ja bis auf wenige Ausnahmen alle SQL's erlaubt sind.
Allerdings sollte schon die Zuweisung erkennbar sein, denn so erzeugst du nur einen True-Wert, der verloren geht:

[set] :NEW.ITEM_INTERNAL_NO =
CASE NEW.DOC_TYPE_ID
WHEN 100 THEN 'xyz';
WHEN 200 THEN 'abc';
WHEN 300 THEN 'def;
ELSE null
END;

Re: CASE WHEN in Triggern möglich?

Verfasst: Fr 20. Sep 2019, 11:34
von martin.koeditz
Hi bfuerchau,

ich Trottel habe mein Anliegen falsch dargestellt. Ich probiere es nochmal:
CREATE OR ALTER TRIGGER TBL_DOC_NUMBER_BIU FOR TBL_DOC ACTIVE
BEFORE INSERT OR UPDATE POSITION 10000
AS
BEGIN
CASE NEW.DOC_TYPE_ID
WHEN 100 THEN
UPDATE TBL_DOC_NO SET NEW.ITEM_INTERNAL_NO = 'xyz' WHERE DOC_TYPE_ID = 100;
WHEN 200 THEN
UPDATE TBL_DOC_NO SET NEW.ITEM_INTERNAL_NO = 'abc' WHERE DOC_TYPE_ID = 200';
WHEN 300 THEN
UPDATE TBL_DOC_NO SET NEW.ITEM_INTERNAL_NO = 'def' WHERE DOC_TYPE_ID = 300;
ELSE
UPDATE TBL_DOC_NO SET NEW.ITEM_INTERNAL_NO = null WHERE DOC_TYPE_ID = 999;
END
Bitte nicht auf die inhaltliche Logik achten. Mir geht es nur darum, ob es ein Konstrukt gibt, mit dem ich die Statements fallabhängig ausführen kann. Alternativ könnte ich natürlich IF-Klauseln verwenden. Bei mehreren Fallunterscheidungen ist ein Switch Case übersichtlicher.

Dank und Gruß
Martin

Re: CASE WHEN in Triggern möglich?

Verfasst: Fr 20. Sep 2019, 15:23
von bfuerchau
Dafür gibt es doch tatsächlich den IF-Befehl:
https://www.firebirdsql.org/pdfmanual/h ... loops.html