Postgresql

函式、參數依賴項、PostgreSQL 中的預設值

  • April 3, 2019

我想編寫一個帶有兩個參數的函式,這將具有依賴性。像這樣的東西:

   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;

然後你有三個版本的函式,零到兩個參數。

引用自:https://dba.stackexchange.com/questions/233822