Lookup durch Trigger bei Insert

23/05/2008 - 10:51 von aka | Report spam
Hallo zusammen,

ich versuche, vor dem Insert von Daten in einer Tabelle mit folgendem
Trigger einen Wert aus einer anderen Tabelle zu ermitteln und diesen in
einem Feld der Tabelle zu setzen, in die ich Daten einfügen möchte. DB ist
Firebird2.1. Den Trigger kann ich nicht anlegen, FB sagt mir, daß ein
Subselect in diesem Kontext nicht möglich ist. Geht das generell nicht oder
mache ich etwas falsch?

create trigger ProduktionMaterial_BIU for ProduktionMaterial
before insert or update as
declare variable PID decimal(18,0);
begin
PID = (select ID from Produktion p
where (p.Anlage = new.Anlage)
and (p.Anfang <= new.Zeit)
and (p.Ende >= new.Zeit));
new.ProduktionID = PID;
end

Hintergrund: Ich habe viele einzelne Textdateien, aus die ich mir
verschiedene Daten extrahiere und dann in einem sauberen Datenmodell
speichern möchte. Ich könnte die Daten sicher auch ohne den Fremdschlüssel
speichern, allerdings dauert ein Select dann um ein Vielfaches lànger.
Wie löst Ihr solche Sachen?


Gruß,
André
 

Lesen sie die antworten

#1 Michael Justin
23/05/2008 - 17:55 | Warnen spam
wrote:

create trigger ProduktionMaterial_BIU for ProduktionMaterial
before insert or update as
declare variable PID decimal(18,0);
begin
PID = (select ID from Produktion p
where (p.Anlage = new.Anlage)
and (p.Anfang <= new.Zeit)
and (p.Ende >= new.Zeit));
new.ProduktionID = PID;
end



Versuch mal diese Syntax:

SELECT ID FROM ...
INTO PID;


p.s. Businesslogik in die Trigger zu legen ist zwar nicht grundsàtzlich
falsch. Das könnte aber zu Wochenend- oder Nachtarbeit führen, da man
zur Änderung des Triggers eigentlich ein Wartungsfenster braucht :)


Viele Grüße
Michael Justin
SCJP, SCJA
betasoft - Software for Delphi™ and for the Java™ platform
http://www.mikejustin.com - http://www.betabeans.de

Ähnliche fragen