[pgSQL] Waarde toekennen mbv trigger
Ik ben eens serieus in postgresql aan het duiken en begin mijn web stap voor stap te vinden. In diverse tutorials kwam ik functions (procedurs) en triggers tegen, lijkt mij ideaal om te gebruiken voor dingen die je niet in je code af wil vangen.
Zo ook de mogelijkheid om bij te houden wanneer een record gecreerd of geupdate wordt. Ik weet dat ik mbv een trigger een pgSql functie aan kan roepen. De functie aanroepen lijkt me an sich nog niet zo'n probleem, echter de functie zelf lukt me nog niet helemaal.
Deze functie wordt door pgAdminIII niet goedgekeurd:
Ik wil dus de waarde van een veld in de gewijzgide rij veranderen naar de huidige datum (timestamp-veld).
Anyone? pgFrank?
EDIT:
Kan dit een algemene functie worden of moet voor iedere tabel een nieuwe functie worden aangemaakt, of kan het misschien ook zonder functie maar direct in de trigger?
Zo ook de mogelijkheid om bij te houden wanneer een record gecreerd of geupdate wordt. Ik weet dat ik mbv een trigger een pgSql functie aan kan roepen. De functie aanroepen lijkt me an sich nog niet zo'n probleem, echter de functie zelf lukt me nog niet helemaal.
Deze functie wordt door pgAdminIII niet goedgekeurd:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
CREATE FUNCTION holiday.update_changed() RETURNS holiday.notes AS
$BODY$BEGIN
IF( TG_OP = 'UPDATE' ) THEN
NEW.changed := now();
RETURN NEW;
END IF;
END;$BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION holiday.update_changed() OWNER TO [eigenaar];
$BODY$BEGIN
IF( TG_OP = 'UPDATE' ) THEN
NEW.changed := now();
RETURN NEW;
END IF;
END;$BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION holiday.update_changed() OWNER TO [eigenaar];
Ik wil dus de waarde van een veld in de gewijzgide rij veranderen naar de huidige datum (timestamp-veld).
Anyone? pgFrank?
EDIT:
Kan dit een algemene functie worden of moet voor iedere tabel een nieuwe functie worden aangemaakt, of kan het misschien ook zonder functie maar direct in de trigger?
Gewijzigd op 01/01/1970 01:00:00 door Storeman storeman
Gesponsorde koppelingen:
http://www.techonthenet.com/oracle/triggers/after_update.php is met oracle maar zoiets zal er ook wel voo PGSQL zijn
http://archives.postgresql.org/pgsql-bugs/2004-07/msg00196.php
http://archives.postgresql.org/pgsql-bugs/2004-07/msg00196.php
Gewijzigd op 01/01/1970 01:00:00 door Klaasjan Boven
De functie zal een TRIGGER moeten returnen, daar is hier geen sprake van. Daarnaast moet je volgens mij een NULL retourneren wanneer er geen NEW retour komt.
Probeer deze eens:
Zie verder de handleiding, die is onmisbaar bij dit soort zaken.
Probeer deze eens:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
CREATE FUNCTION holiday.update_changed() RETURNS trigger AS
$BODY$
BEGIN
IF( TG_OP = 'UPDATE' ) THEN
NEW.changed := now();
RETURN NEW;
END IF;
RETURN NULL; -- eventueel in een ELSE zetten, probeer het eens uit.
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
$BODY$
BEGIN
IF( TG_OP = 'UPDATE' ) THEN
NEW.changed := now();
RETURN NEW;
END IF;
RETURN NULL; -- eventueel in een ELSE zetten, probeer het eens uit.
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
Zie verder de handleiding, die is onmisbaar bij dit soort zaken.



