array_length()
nécessite deux paramètres, le second étant la dimension du tableau :
array_length(id_clients, 1) > 0
Donc :
IF array_length(id_clients, 1) > 0 THEN
query := query || format(' AND id = ANY(%L))', id_clients);
END IF;
Cela exclut à la fois le tableau vide et NUL.
Ou utilisez cardinality()
dans Postgres 9.4 ou ultérieur. Voir la réponse ajoutée par @bronzenose.
Mais si vous concaténez une requête à exécuter avec EXECUTE
, il serait plus intelligent de passer des valeurs avec un USING
clause. Exemples :
- Sous-sélection multiligne comme paramètre `exécuter en utilisant`
- Comment utiliser EXECUTE FORMAT ... USING dans la fonction postgres
BTW, pour vérifier explicitement si un tableau est vide (comme votre titre l'indique - mais ce n'est pas ce dont vous avez besoin ici) comparez-le simplement à un tableau vide :
id_clients = '{}'
C'est tout. Vous obtenez :
TRUE
.. le tableau est videNULL
.. le tableau est NULLFALSE
.. tout autre cas (le tableau a des éléments - même s'il ne s'agit que d'éléments NULL)