У меня есть эта функция plpgsql:
CREATE OR REPLACE FUNCTION func_example(
IN check_ids INT [],
OUT recs REFCURSOR,
OUT po_result_code TEXT
) RETURNS RECORD LANGUAGE plpgsql AS $$
BEGIN
OPEN recs FOR
SELECT *
FROM my_table t
JOIN my_another_table tt on tt.tid = t.id
WHERE t.enabled = TRUE
AND tt.some = 1
AND (
check_ids IS NULL OR check_ids.count = 0 /* <-- problem here */
OR t.id = ANY (check_ids)
);
po_result_code := 0;
RETURN;
END;
$$;
При ее вызове появляется сообщение об ошибке:
Error: [42P01] ERROR: missing FROM-clause entry for table "check_ids"
SQL state: 42P01
Как проверить, что аргумент равен нулю или значениюв аргументе '?
Некоторые примеры данных:
CREATE TABLE my_table (
id INT,
enabled BOOLEAN DEFAULT TRUE
);
CREATE TABLE my_another_table (
tid INT,
"some" INT DEFAULT 1,
CONSTRAINT t_another_to_my_fk FOREIGN KEY (tid) REFERENCES my_table (id)
);
INSERT INTO my_table (id, enabled) VALUES (1, TRUE);
INSERT INTO my_another_table (tid, "some") VALUES (1, 1);