Hallo Heiko,
ich habe doch noch was vergessen. IB6 kennt ja ach noch kein CASE - Construct!
Wenn es auch in IB6 funktionieren muss, könnte der Trigger so aussehen:
SQL-Code:
CREATE TRIGGER BUCHUNG_BIU0
FOR BUCHUNG
ACTIVE BEFORE
INSERT POSITION 1
as
declare variable range_exists
char(1);
begin
/*
Datumsbereich prüfen bei Insert
*/
range_exists = '
F';
select '
T'
from rdb$
database where
exists(
select *
from buchung
where
(new.startdate
between startdate
and enddate)
or
(new.enddate
between startdate
and enddate))
into :range_exists;
if (:range_exists = '
T')
then
exception e_invaliddaterange '
Überlappender Datumsbereich';
end
Man kann hier auch ein Select count(*) nehmen, da ja eigentlich höchstens ein Datensatz mit der Bedingung existieren kann und damit der Geschwindigkeitsvorteil von exists wegfällt.
Und wie gesagt, der gleichen Trigger noch mal für BEFORE UPDATE.
Cu, Frank