Test für die null in der Funktion mit unterschiedlichen Parametern

Ich habe eine Postgres-Funktion:

create function myfunction(integer, text, text, text, text, text, text) RETURNS 
table(id int, match text, score int, nr int, nr_extra character varying, info character varying, postcode character varying,
street character varying, place character varying, country character varying, the_geom geometry)
AS $$
BEGIN

return query (select a.id, 'address' as match, 1 as score, a.ad_nr, a.ad_nr_extra,a.ad_info,a.ad_postcode, s.name as street, p.name place , c.name country, a.wkb_geometry as wkb_geometry from "Addresses" a 
    left join "Streets" s on a.street_id = s.id 
        left join "Places" p on s.place_id = p.id 
            left join "Countries" c on p.country_id = c.id 
            where c.name = $7 
                and p.name = $6
                    and s.name = $5
                    and a.ad_nr = $1 
                    and a.ad_nr_extra = $2
                    and a.ad_info = $3
                    and ad_postcode = $4);
END;
$$
LANGUAGE plpgsql;

Diese Funktion kann nicht für das richtige Ergebnis, wenn eine oder mehrere der Variablen eingegeben sind NULL, weil ad_postcode = NULL fehl.

Was kann ich tun, um auf NULL zu testen innerhalb der Abfrage?

Sie können der Funktion Argumente, Namen anstelle von $1..$9. So etwas wie myfunction(v_ad_nr integer, v_ad_nr_extra text, ... und ... a.ad_nr = v_ad_nr .... Es macht den code sehr viel besser lesbar und einfacher zu ändern.
Und Lesen Sie einige Artikel über SQL-Abfrage zu formatieren. Derzeit ist es schrecklich. Oder zumindest, verwenden Sie eine automatische Abfrage-verschönerer.
Danke für hinting mir Argumentnamen verwenden, sehr geschätzt.

InformationsquelleAutor milovanderlinden | 2013-06-27

Schreibe einen Kommentar