В настоящее время я ищу создание функции pg sql, которая выполняет следующие действия: проверяет ее параметры на пустые значения, удаляет входные данные, которые не соответствуют таблице поиска, а затем поворачивает возвращаемые данные (которые являются идентификаторами соответствующих параметры).
Я предполагаю, что кросс-таблица не поддерживает переменные $, однако я не могу понять, как получить желаемый результат, если мое предположение верно.
CREATE OR REPLACE FUNCTION _audit(
INT4 DEFAULT NULL
, VARCHAR(50) DEFAULT NULL
, VARCHAR(50) DEFAULT NULL
)
RETURNS TABLE (
datetime TIMESTAMPTZ, id INT2, c1 int4, c2 int4
)
AS $$
SELECT
now() AS datetime
, *
FROM
crosstab('
WITH cte (eval) AS (
SELECT CASE WHEN '$2' IS NULL THEN NULL ELSE '$2' END
UNION ALL SELECT CASE WHEN '$3' IS NULL THEN NULL ELSE '$3' END
)
SELECT
lookup.id
, lookup.mod_id
, lookup.mod_id as val
FROM
data.mod_lookup AS lookup
INNER JOIN cte AS cte ON lookup.mod_eval = cte.eval
ORDER BY
mod_id
') AS final_results(id INT2, c1 int4, c2 int4)
;
$$
LANGUAGE SQL
CALLED ON NULL INPUT;
SELECT audit(
1
, CAST('mod n 1' AS VARCHAR(50))
, CAST('mod n 1' AS VARCHAR(50))
)
Заранее спасибо!