Hallo zusammen,
meine PL/SQL Kenntnisse sind leider nicht so gut und deswegen habe ich das folgende Problem:
Ich habe eine Tabelle "triggertest" diese sieht so aus:
Kurze Info. zu meiner Datenbankversion:
Diese Tabelle ist eine Art "Bestellungen"-Tabelle. Es geht letzten Endes hierbei nicht um Produkte sondern um Leistungen (in dem Fall um ein Premium Account).
Die Tabelle hält fest, wann welcher Benutzer (Kunde) einen premium Account hatte und weiterhin hat.
Das Problem der ganzen Sache ist, dass ich irgendwie es schaffen muss, dass vor dem INSERT INTO geprüft wird, ob der Benutzer bereits einen Auftrag hat (sprich Premium ist) und erst eine weiterer Auftrag eingetragen wird, wenn das Datum (aufbis) vom alten Auftrag kleiner ist als das vom neuen Auftrag.
Das soll einfach verhiendern, dass ein Kunde nur einen Auftrag zur gleichen zeit haben darf. Überschneidungen möchte ich ebenfalls vermeiden!
Ein paar Versuche hatte ich schon gestartet, aber leider ohne erfolg:
Den Bereich "AND :OLD.kundenid = :NEW.kundenid THEN" habe ich separat gestestet gehabt, anscheinend wird er einfach ignoriert.
Natürlich sind im Trigger noch andere Überprüfungen drin, wie Startdatum des Auftrags darf nicht älter sein als Enddatum.
Wie gesagt, dass ganze funktioniert nicht so wirklich, der Datensatz wird trozdem eingefügt obwohl ich gegen den ElSIF-Block verstoße!
Ich würde mich über eure Hilfe sehr freuen!
Gruß
Nedo
meine PL/SQL Kenntnisse sind leider nicht so gut und deswegen habe ich das folgende Problem:
Ich habe eine Tabelle "triggertest" diese sieht so aus:
Code:
CREATE TABLE TRIGGERTEST ( AUFTRAGID NUMBER(38,0) NOT NULL, AUFVON TIMESTAMP (6), AUFBIS TIMESTAMP (6), ZAHLDATUM TIMESTAMP (6), KUNDENID NUMBER(38,0) NOT NULL, CONSTRAINT TRIGGERTEST_PK PRIMARY KEY (AUFTRAGID) );
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Product
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
Die Tabelle hält fest, wann welcher Benutzer (Kunde) einen premium Account hatte und weiterhin hat.
Das Problem der ganzen Sache ist, dass ich irgendwie es schaffen muss, dass vor dem INSERT INTO geprüft wird, ob der Benutzer bereits einen Auftrag hat (sprich Premium ist) und erst eine weiterer Auftrag eingetragen wird, wenn das Datum (aufbis) vom alten Auftrag kleiner ist als das vom neuen Auftrag.
Das soll einfach verhiendern, dass ein Kunde nur einen Auftrag zur gleichen zeit haben darf. Überschneidungen möchte ich ebenfalls vermeiden!
Ein paar Versuche hatte ich schon gestartet, aber leider ohne erfolg:
Code:
create or replace TRIGGER proof_kundenid_trg BEFORE INSERT ON triggertest FOR EACH ROW BEGIN IF :NEW.aufvon >= :NEW.aufbis THEN raise_application_error (-20901, 'AuftragVon größer oder gleich AuftragBis'); ELSIF :NEW.aufbis >= LOCALTIMESTAMP AND :NEW.aufvon >= :OLD.aufvon OR :NEW.aufvon <= :OLD.aufvon AND :NEW.aufbis <= :OLD.aufbis OR :NEW.aufbis >= :OLD.aufbis AND :OLD.kundenid = :NEW.kundenid THEN raise_application_error (-20902, 'Der Unternehmer hat bereits ein premium Account.'); END IF; END;
Natürlich sind im Trigger noch andere Überprüfungen drin, wie Startdatum des Auftrags darf nicht älter sein als Enddatum.
Wie gesagt, dass ganze funktioniert nicht so wirklich, der Datensatz wird trozdem eingefügt obwohl ich gegen den ElSIF-Block verstoße!
Ich würde mich über eure Hilfe sehr freuen!
Gruß
Nedo
Comment