array_length()
vereist twee parameters, de tweede is de afmeting van de array:
array_length(id_clients, 1) > 0
Dus:
IF array_length(id_clients, 1) > 0 THEN
query := query || format(' AND id = ANY(%L))', id_clients);
END IF;
Dit sluit zowel lege arrays en . uit NULL.
Of gebruik cardinality()
in Postgres 9.4 of hoger. Zie toegevoegd antwoord van @bronzenose.
Maar als u een query samenvoegt om uit te voeren met EXECUTE
, zou het slimmer zijn om waarden door te geven met een USING
clausule. Voorbeelden:
- Multirow subselecteren als parameter om `uit te voeren met`
- EXECUTE FORMAT gebruiken ... GEBRUIKEN in de postgres-functie
Trouwens, om expliciet te controleren of een array leeg is (zoals je titel al zegt - maar dat is niet wat je hier nodig hebt) vergelijk het gewoon met een lege array:
id_clients = '{}'
Dat is alles. Je krijgt:
TRUE
.. array is leegNULL
.. array is NULLFALSE
.. elk ander geval (array heeft elementen - zelfs als het alleen NULL-elementen zijn)