array_length()
yêu cầu hai tham số, thứ hai là thứ nguyên của mảng:
array_length(id_clients, 1) > 0
Vì vậy:
IF array_length(id_clients, 1) > 0 THEN
query := query || format(' AND id = ANY(%L))', id_clients);
END IF;
Điều này loại trừ cả mảng trống và KHÔNG ĐỦ.
Hoặc sử dụng cardinality()
trong Postgres 9.4 trở lên. Xem câu trả lời được bổ sung bởi @bosystemnose.
Nhưng nếu bạn đang nối một truy vấn để chạy với EXECUTE
, sẽ thông minh hơn nếu chuyển các giá trị bằng USING
mệnh đề. Ví dụ:
- Nhiều chọn phụ làm tham số để `thực thi bằng cách sử dụng`
- Cách sử dụng THỰC HIỆN ĐỊNH DẠNG ... SỬ DỤNG trong hàm postgres
BTW, để kiểm tra rõ ràng xem một mảng trống (như tiêu đề của bạn nói - nhưng đó không phải những gì bạn cần ở đây) chỉ cần so sánh nó với một mảng trống:
id_clients = '{}'
Đó là tất cả. Bạn nhận được:
TRUE
.. mảng trống
NULL
.. mảng là NULL
FALSE
.. bất kỳ trường hợp nào khác (mảng có các phần tử - ngay cả khi chỉ là NULL phần tử)