簡體   English   中英

如何在Postgresql中創建用戶自定義的function?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM