2017-10-11 2 views
-2

Ich habe eine Datenbank namens Dvdrental und in dieser Datenbank gibt es eine Funktion namens public.film_not_in_stock, aber ich verstehe nicht, was es tut.weiß nicht, was diese Funktion tut

-- Function: public.film_not_in_stock(integer, integer) 

-- DROP FUNCTION public.film_not_in_stock(integer, integer); 
CREATE OR REPLACE FUNCTION public.film_not_in_stock(
IN p_film_id integer, 
IN p_store_id integer, 
OUT p_film_count integer) 


RETURNS SETOF integer AS 

$BODY$ 
SELECT inventory_id 
FROM inventory 
WHERE film_id = $1 
AND store_id = $2 
AND NOT inventory_in_stock(inventory_id); 
$BODY$ 

    LANGUAGE sql VOLATILE 
    COST 100 
    ROWS 1000; 
ALTER FUNCTION public.film_not_in_stock(integer, integer) 
    OWNER TO postgres; 
+0

Es sieht so aus, als würde das Inventar überprüft, um zu sehen, ob die ID des Films für eine bestimmte Filial-ID angezeigt wird. Was ist daran verwirrend? – duffymo

+0

Aber was macht es danach? Weil das eine Funktion ist und es etwas tun muss? –

+0

Eine Funktion (im Sinne von Postgres) benötigt einige Eingaben und gibt einige Ausgaben zurück und kann zusätzlich Nebenwirkungen haben. In diesem Fall ist die Eingabe die Parameter "p_film_id" und "p_store_id", und die Ausgabe ist das Ergebnis dieser "SELECT" -Anweisung. – IMSoP

Antwort

0

Es ist eine LANGUAGE SQL Funktion. Nicht plpgsql.

SQL-Sprachfunktionen geben implizit die Ergebnisse der letzten Abfrage zurück, die sie ausführen.

Ihre Funktion, wenn es in plpgsql neu geschrieben wurde, täte

$BODY$ 
BEGIN 
    RETURN QUERY 
     SELECT inventory_id 
     FROM inventory 
     WHERE film_id = $1 
     AND store_id = $2 
     AND NOT inventory_in_stock(inventory_id); 
$BODY$ 
LANGUAGE plpgsql VOLATILE 

aber in einer LANGUAGE SQL Funktion der RETURN ist implizit.