我目前正在寻找创建pgsql函数来执行以下操作:检查其参数是否为空,删除与查找表不匹配的输入,然后旋转返回的数据(这是相关参数的ID)。
我的假设是交叉表不支持$变量,但是如果我的假设正确,我将无法解决如何获得所需的输出。
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))
)
谢谢!