Optionales argument, das in PL/pgSQL-Funktion

Ich bin versucht zu schreiben Sie eine PL/pgSQL-Funktion mit optionalen Argumenten. Es führt eine Abfrage basierend auf einer gefilterten Gruppe von Datensätzen (falls angegeben), sonst führt eine Abfrage auf die gesamten Daten in einer Tabelle.

Beispielsweise (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 Aufgabe umzusetzen?

Als ein beiseite, ich würde gerne wissen, wie ich könnte so eine Funktion in einer anderen äußeren Funktion. Dies ist, wie ich es tun würde - ist es richtig, oder gibt es eine bessere Möglichkeit?

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
Schreibe einen Kommentar