創建以下函式時我取得了成功,但是當我呼叫它時,我收到一條錯誤訊息,指出沒有目的地。
CREATE FUNCTION get_top_films() RETURNS int
language PLPGSQL
AS $$
DECLARE top_films integer;
BEGIN
SELECT i.film_id,
COUNT(*)
FROM rental r
JOIN inventory i ON r.inventory_id=i.inventory_id
GROUP BY 1
ORDER BY COUNT(*) DESC
LIMIT 10;
RETURN top_films;
END;
$$
uj5u.com熱心網友回復:
CREATE FUNCTION get_top_films() RETURNS setof inventory.filmid%type
language sql
AS $$
SELECT i.film_id
FROM rental r
JOIN inventory i ON r.inventory_id=i.inventory_id
GROUP BY 1
ORDER BY COUNT(*) DESC
LIMIT 10
$$;
語言 SQL:https
:
//www.postgresql.org/docs/current/xfunc-sql.html 語言 plpgsql:https
://www.postgresql.org/docs/current/plpgsql.html
語言 sql 更容易理解。您的查詢不是動態的,因此它只是一個函式和 $$ 查詢 $$。
setof inventory.filmid%type會使它更加靈活。如果你的filmid型別改變,這個函式不需要改變。
uj5u.com熱心網友回復:
擴展我的評論:
CREATE OR REPLACE FUNCTION get_top_films()
RETURNS SETOF INTEGER -- or inventory.filmid%TYPE
AS $$
DECLARE
BEGIN
RETURN QUERY
SELECT i.film_id
FROM rental r
JOIN inventory i ON r.inventory_id = i.inventory_id
GROUP BY i.film_id
ORDER BY COUNT(*) DESC
LIMIT 10
;
END;
$$ LANGUAGE PLPGSQL;
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/441778.html
標籤:sql PostgreSQL 功能
