Postgresql
函式、參數依賴項、PostgreSQL 中的預設值
我想編寫一個帶有兩個參數的函式,這將具有依賴性。像這樣的東西:
CREATE OR REPLACE FUNCTION years_compare( IN year1 integer DEFAULT date_part('year'::text, ('now'::text)::date), IN year2 integer DEFAULT year1 - 1) ...
當我呼叫函式years_compare(2019)時,第二個參數的值為2018。但是我怎樣才能為第二個參數寫一個預設值呢?
CREATE OR REPLACE FUNCTION years_compare( IN year1 integer DEFAULT NULL, IN year2 integer DEFAULT NULL ) year1 = COALESCE(year1, date_part('year'::text, ('now'::text)::date)); year2 = COALESCE(year2, year1 - 1); -- ...
也許在這裡使用 Postgres 對多態性的支持可能有用。
首先使用兩個參數創建基本函式。
CREATE FUNCTION years_compare(IN year1 integer, IN year2 integer) RETURNS integer AS $$ BEGIN RETURN 1; --<replace by some calculated value> END; $$ LANGUAGE PLpgSQL;
然後創建一個只有一個參數的函式,使用第一個參數和計算的第二個參數呼叫基本函式。
CREATE FUNCTION years_compare(IN year1 integer) RETURNS integer AS $$ BEGIN RETURN years_compare(year1, year1 - 1); END; $$ LANGUAGE PLpgSQL;
最後創建一個函式的無參數版本,使用計算的參數呼叫第二個函式。
CREATE FUNCTION years_compare() RETURNS integer AS $$ BEGIN RETURN years_compare(date_part('year'::text, ('now'::text)::date)::integer); END; $$ LANGUAGE PLpgSQL;
然後你有三個版本的函式,零到兩個參數。