Hauke: Oracle Trigger und Constraint Frage

Guten "Morgen"

ich habe zwei Fragen und zwar wie kann ich mit einem Oracle Trigger folgendes schaffen:

ID    number(10,0)
Wert  varchar2(100)
Datum date (oder timestamp)

Sobald jemand einen Wert in dieser Tabelle (nennen wir sie einmal TEST) verändert oder inserted, soll das Datum-Feld auf (SELECT SYSTIMESTAMP FROM DUAL) gesetzt werden. Ich wollte das irgendwie mit einem Trigger machen, nur ich weiß nicht wie man das macht. Im Internet habe ich ein paar Sachen gefunden zu Triggern, aber nicht das was ich brauche, denn ich muss ja bei dem "update"-trigger wissen, in welcher Row etwas verändert wurde.

Zweite Frage ist, wie kann ich ein Constraint so erstellen, dass Daten in dieser Tabelle:
id     number   (PK)
x      number
y      number
zoom   number
text   varchar2

nur gültig sind, wenn X UND Y UND ZOOM alle einen Inhalt haben , oder alle keinen Inhalt haben. Sobald eines von denen ein Inhalt hat und mindestens einer von den anderen kein Inhalt hat, soll es einen Fehler geben.

Ich danke für eure morgentliche Hilfe.

Viele Grüße,
Hauke

  1. Du hast da bestimmte Anforderungen, bestimmte Einstellungen auf Tabellenebene, die Unsereins grösstenteils in der Datenzugriffsschicht bearbeiten würde, also mithilfe der Prozeduren.

    ID    number(10,0)
    Wert  varchar2(100)
    Datum date (oder timestamp)

    Sobald jemand einen Wert in dieser Tabelle (nennen wir sie einmal TEST) verändert oder inserted, soll das Datum-Feld auf (SELECT SYSTIMESTAMP FROM DUAL) gesetzt werden.

    Exakt hier, Du schreibst eine UPDATE-Prozedur und stellst sicher ("Rechtesystem!), dass Applikationen nicht an der SP vorbei ein UPDATE absetzen können.
    (Trigger sind etwas schwierige DB-Objekte, Wir würden auf sie bestmöglich verzichten.)

    Stell doch mal einen Verweis auf den "Triggerteil" der Oracle-Doku hier ein, dann könnten wir mal schauen (wenns denn sein muss).

    Zweite Frage ist, wie kann ich ein Constraint so erstellen, dass Daten in dieser Tabelle:
    id     number   (PK)
    x      number
    y      number
    zoom   number
    text   varchar2

    nur gültig sind, wenn X UND Y UND ZOOM alle einen Inhalt haben , oder alle keinen Inhalt haben.

    Auch etwas für die Datenzugriffschicht, DB-seitig ist das nicht einzustellen.

    Sobald eines von denen ein Inhalt hat und mindestens einer von den anderen kein Inhalt hat, soll es einen Fehler geben.

    ;)

  2. yo,

    Sobald jemand einen Wert in dieser Tabelle (nennen wir sie einmal TEST) verändert oder inserted, soll das Datum-Feld auf (SELECT SYSTIMESTAMP FROM DUAL) gesetzt werden.

    CREATE OR REPLACE TRIGGER trigger_name BEFORE INSERT ON tabellen_name FOR EACH ROW
    BEGIN
      :NEW.UpdateDate_TS := SYSTIMESTAMP;
    END;
    /

    Update ist ähnlich, nur das Schlüsswelwort ändern und einen anderen Objektnamen vergeben.

    zur zweiten Frage, du kannst das mit einem Check-Constraint lösen. hier mal ein Link dafür.

    < http://www.techonthenet.com/oracle/check.php>

    Ilja

    1. zur zweiten Frage, du kannst das mit einem Check-Constraint lösen. hier mal ein Link dafür.

      Bist Du sicher, dass ein CHECK-Constraint unter Oracle mehrere Spalten betreffen dürfen? Und wie würde der Constraint ggf. genau aussehen?