Ich möchte eine Einschränkung auf ein Geburtsdatum Feld für eine meiner db-Tabellen setzen. Im Wesentlichen möchte ich sicherstellen, dass pat_dob_dt
vor mindestens 16 Jahren (ab dem aktuellen Datum) ist. Ich bin mit PostgreSQL 8.4.20 und here zur Orientierung verwendet:PostgreSQL Trigger/Funktion zu gewährleisten, dass das Datum in der Vergangenheit ist
CREATE OR REPLACE FUNCTION patient_dob_in_past()
RETURNS TRIGGER AS $$
BEGIN
-- check pat_dob_dt is in past --
IF (NEW.pat_dob_dt > current_date - interval '16 years') THEN
RAISE EXCEPTION '% must be 16 years in past', NEW.pat_dob_dt
END IF;
RETURN NEW;
END;
$$ language 'plpgsql';
CREATE OR REPLACE TRIGGER patient_dob_in_past BEFORE UPDATE OR INSERT
ON patients FOR EACH ROW EXECUTE PROCEDURE patient_dob_in_past();
Leider bin ich mit dem folgenden Fehler traf
ERROR: syntax error at or near "END" at character 14
QUERY: SELECT $1 END IF
CONTEXT: SQL statement in PL/PgSQL function "patient_dob_in_past" near line 4
LINE 1: SELECT $1 END IF
nicht sicher, wo ich falsch werde, da ich die psql docs bin nach für 8.4
BEARBEITEN Semikolon behoben Funktionsproblem. Ich habe auch einen Fehler für meine Trigger
ERROR: syntax error at or near "TRIGGER" at character 19 LINE 1: CREATE OR REPLACE TRIGGER patient_dob_in_past BEFORE UPDATE ...
Fehler starrte mich ins Gesicht. Jetzt habe ich einen Fehler mit meinem Auslöser. Ich hatte keine CHECK-Einschränkung in Betracht gezogen. Ich nehme an, das wäre schneller? – moadeep
ja - ich nehme an, es wird sowohl schneller als auch ordentlicher sein –
Unglücklicherweise verletzen einige unserer alten Aufzeichnungen bereits eine Beschränkung. Würde einige Zeit brauchen, um die Datenbank zu säubern. Wahrscheinlich schneller mit einem Auslöser. Irgendeine Idee warum meine Auslösefehler? – moadeep