Optionales Argument in der PL / pgSQL-Funktion

Ich versuche, eine PL / pgSQL-Funktion mit optionalen Argumenten zu schreiben. Es führt eine Abfrage basierend auf einer gefilterten Gruppe von Datensätzen aus (falls angegeben), andernfalls wird eine Abfrage für die gesamte Datenmenge in einer Tabelle ausgeführt.

Zum Beispiel(PSEUDO-CODE):

CREATE OR REPLACE FUNCTION foofunc(param1 integer, param2 date, param2 date, optional_list_of_ids=[]) RETURNS SETOF RECORD AS $
    IF len(optional_list_of_ids) > 0 THEN
        RETURN QUERY (SELECT * from foobar where f1=param1 AND f2=param2 AND id in optional_list_of_ids);
    ELSE
        RETURN QUERY (SELECT * from foobar where f1=param1 AND f2=param2);
    ENDIF
$ LANGUAGE SQL;

Was wäre der richtige Weg, um diese Funktion zu implementieren?

Nebenbei möchte ich wissen, wie ich eine solche Funktion in einer anderen äußeren Funktion aufrufen könnte. So würde ich es machen - ist es richtig oder gibt es einen besseren Weg?

CREATE FUNCTION foofuncwrapper(param1 integer, param2 date, param2 date) RETURNS SETOF RECORD AS $
BEGIN
   CREATE TABLE ids AS SELECT id from foobar where id < 100;
   RETURN QUERY (SELECT * FROM foofunc(param1, param2, ids));
END
$ LANGUAGE SQL

Antworten auf die Frage(3)

Ihre Antwort auf die Frage