假設我有一個當前正在使用 CTE 執行的表函式,例如:
WITH info AS (
SELECT * FROM sales WHERE website='Google'
) SELECT * FROM info JOIN other USING (id)
有沒有辦法對 CTE 進行引數化,以便我可以執行以下操作:
WITH table_function_info($var1) AS (
SELECT * FROM sales WHERE website=$var1
)
然后我可以稱之為:
WITH info AS
table_function_info('Yahoo')
SELECT * FROM info JOIN other USING (id)
或者在 postgres (CTE) 中引數化表函式的正確方法是什么?請注意,我不一定知道輸出列,它們可能會發生變化(例如,如果用戶添加/洗掉sales表中的列)。
uj5u.com熱心網友回復:
創建一個回傳一組型別行的函式sales,例如
create or replace function select_from_sales(arg text)
returns setof sales language sql as $$
select * from sales where website = arg
$$;
該函式的輸出格式將適應可能對表結構進行的修改,請在Db<>fiddle 中對其進行測驗。Postgres 自動為資料庫中每個創建/更改的表創建相應的型別。這允許用戶以簡單的方式宣告函式的回傳型別。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/352996.html
標籤:sql PostgreSQL
下一篇:有沒有結合這兩個SQL查詢?
