2017-06-01 41 views
1

據我所知,當你在postgresql中創建一個用戶定義的函數時,你必須指定參數號和類型。就像這樣:PostgreSQL - 如何用動態參數定義用戶定義的函數?

CREATE OR REPLACE FUNCTION my_add(xx INTEGER, yy INTEGER) 
RETURNS INTEGER AS 
$$ 
    BEGIN 
    RETURN xx + yy; 
    END; 
$$ 
LANGUAGE plpgsql; 


select my_add(12, 34); 
output: 46 

現在我想建立一個能接收動態參數和工作原理是這樣的函數:

select my_add(1, 2); 
output: 3 

select my_add(1, 2, 3); 
output: 6 

select my_add(10, 4, 5, 1); 
output: 20 

有定義動態參數的一些方法,當你定義功能?我怎樣才能做到這一點?謝謝。

回答

1

您正在尋找variadic parameters,例如:

CREATE FUNCTION mleast(VARIADIC arr numeric[]) RETURNS numeric AS $$ 
    SELECT min($1[i]) FROM generate_subscripts($1, 1) g(i); 
$$ LANGUAGE SQL; 
+0

@hyman - 'CREATE FUNCTION my_concat(可變參數改編文本[])返回文本$$ SELECT array_to_string(ARR, ''); $$ LANGUAGE SQL;'然後調用:'select my_concat('hello','world','。');' –

+0

非常感謝!你的代碼可以處理數字操作。但如果我想定義一個像'concat'這樣的函數,我該怎麼辦?像這樣:'select my_concat('hello','world','。');輸出:helloworld.' – hyman

+0

@OtoShavadze非常感謝!這就是我需要的。 – hyman