# Trigger



## Kirby.exe (7. Jul 2021)

Also ich habe eine Tabelle rental in der eine Auflistung von verliehenen Filmen ist. Nun soll der Trigger bei einem Insert prüfen ob der Film aktuell noch verliehen ist. Soweit so gut...xD Nur verstehe ich nicht was ich machen soll wenn er nicht verliehen ist? Was gibt meine Funktion dann zurück?

Hier ist einmal meine Funktion für den Trigger:


```
CREATE FUNCTION prevent_doublerental(inventory_id integer, rental_date timestamp) RETURNS trigger  -- <--- Keine Ahnung was hier hin soll
    LANGUAGE plpgsql
    AS $$
DECLARE
    tmpSQL TEXT;
BEGIN
    tmpSQL := 'Select inventory_id FROM rental r WHERE r.inventory_id = ' || inventory_id ' and r.return_date > ' || rental_date;
    IF NEW.inventory_id IN EXECUTE tmpSQL THEN
        RAISE EXCEPTION 'This Film is already rented and cannot be rented at the moment!';
    END IF;
    RETURN NEW;
END $$;
```

Die Funktion soll dann als Trigger verwendet werden


----------



## LimDul (7. Jul 2021)

42.10. Trigger Functions
					

42.10. Trigger Functions 42.10.1. Triggers on Data Changes 42.10.2. Triggers on Events PL/pgSQL can be used to define trigger functions on …




					www.postgresql.org
				




Du darfst keine parameter definieren: Note that the function must be declared with no arguments

Lies die Doku mal in Ruhe durch.


----------



## Kirby.exe (7. Jul 2021)

Mhh ok dann werde ich das mit dem NEW.xyz lösen aber ich verstehe halt nicht ganz wie ich prüfen soll ob der Film verliehen ist ohne ein SELECT zu machen  Denn er meckert, dass man das nich im IF Executen kann oder so


----------

