Tester la valeur null en fonction des divers paramètres

J'ai une Postgres fonction:

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;

Cette fonction ne donne pas le bon résultat, lorsque l'une ou plusieurs des variables d'entrée sont NULS parce que ad_postcode = NULL échouera.

Que puis-je faire pour tester la valeur NULL à l'intérieur de la requête?

  • Vous pouvez utiliser les arguments de la fonction des noms au lieu de $1..$9. Quelque chose comme myfunction(v_ad_nr integer, v_ad_nr_extra text, ... et ... a.ad_nr = v_ad_nr .... Il rend le code beaucoup plus lisible et plus facile à modifier.
  • Et de lire quelques articles sur la requête SQL de mise en forme. Actuellement, il est horrible. Ou, au moins, l'utilisation d'une interrogation automatique formatage automatique de la requête.
  • Merci pour l'allusion à utiliser les noms d'argument, apprécié.