2017-10-11 179 views
-2

我有一个名为Dvdrental的数据库,在那个数据库中有一个名为public.film_not_in_stock的函数,但我不明白它的作用。不知道这个功能是什么

-- 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

看起来像检查广告资源,以查看电影的ID是否出现在给定商店ID中。有什么困惑呢? – duffymo

+0

但是之后它做了什么?因为这是一个功能,它必须做些什么? –

+0

一个函数(在Postgres使用的意义上)需要一些输入,并返回一些输出,并可能还有副作用。在这种情况下,输入是参数'p_film_id'和'p_store_id',输出是该'SELECT'语句的结果。 – IMSoP

回答

0

这是一个LANGUAGE SQL函数。不是plpgsql。

SQL语言函数隐式返回它们运行的​​最后一个查询的结果。

你的功能,如果它是在PLPGSQL改写,会做

$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 

但在一个LANGUAGE SQL功能RETURN是隐含的。