Как использовать кросс-таблицу с переменными Dynami c - PullRequest
0 голосов
/ 09 апреля 2020

В настоящее время я ищу создание функции 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))
)

Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...