[英]How to create a user-defined function in Postgresql?
我在 Postgres 中有以下查詢。 我想要一個 function ,用戶可以使用 function 調用動態定義 record_year 和 record_month 的值,而無需在查詢語句中指定。 這樣,對於 record_year 和 record_month 的不同用戶輸入值(在這種情況下),可以重復使用相同的查詢。 有人可以幫幫我嗎?
SELECT x.sid, x.record_year, x.record_month, y.addr
FROM x
FULL OUTER JOIN y
ON x.sid = y.sid
WHERE x.record_time='23:50'
and x.record_year='2020'
and x.record_month='1'
group by x.station_id, x.record_year, x.record_month, y.addr;
function 調用可能類似於select function_name(record_year, record_month);
當您返回結果時,應將 function 定義為returns table()
。 如果您只想返回結果,則不需要 PL/pgSQL。 SQL function 就足夠了。
create function get_data(p_time time, p_year int, p_month int)
returns table (sid int, record_year int, record_month int, addr text)
as
$$
SELECT x.sid, x.record_year, x.record_month, y.addr
FROM x
FULL OUTER JOIN y ON x.sid = y.sid
WHERE x.record_time p_time
and x.record_year = p_year
and x.record_month = p_month
group by x.station_id, x.record_year, x.record_month, y.addr
$$
language sql
stable;
您必須調整返回列的數據類型 - 我只是根據名稱猜測它們。
請注意,由於表x
上的條件,您的完整外部聯接實際上是left join
因為它是一個返回 function 的集合,所以像FROM
子句中的表一樣使用它:
select *
from get_data(time '23:50', 2020, 1);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.