array_length()
membutuhkan dua parameter, yang kedua adalah dimensi larik:
array_length(id_clients, 1) > 0
Jadi:
IF array_length(id_clients, 1) > 0 THEN
query := query || format(' AND id = ANY(%L))', id_clients);
END IF;
Ini tidak termasuk array kosong dan NULL.
Atau gunakan cardinality()
di Postgres 9.4 atau lebih baru. Lihat jawaban tambahan dari @bronzenose.
Tetapi jika Anda menggabungkan kueri untuk dijalankan dengan EXECUTE
, akan lebih pintar untuk meneruskan nilai dengan USING
ayat. Contoh:
- Subselect multirow sebagai parameter untuk `dijalankan menggunakan`
- Cara menggunakan EXECUTE FORMAT ... MENGGUNAKAN dalam fungsi postgres
BTW, untuk secara eksplisit memeriksa apakah array kosong (seperti yang dikatakan judul Anda - tapi itu tidak apa yang Anda butuhkan di sini) cukup bandingkan dengan array kosong:
id_clients = '{}'
Itu saja. Anda mendapatkan:
TRUE
.. array kosongNULL
.. array adalah NULLFALSE
.. kasus lain (array memiliki elemen - meskipun hanya elemen NULL)