首页 > 解决方案 > 如何在嵌套的双美元符号交叉表查询中使用 postgres 参数

问题描述

我无法弄清楚如何在 $fn$ $ct_query_1$ 尝试在 where 子句评估中使用 v_id 中添加字符串插值。

  create or replace function fnX (
       p_id varchar(20)
    ) 
    returns table ( a text, b varchar, c varchar, d varchar, e varchar, f varchar) 
    language plpgsql
    as $fn$
    declare 
    DECLARE v_id varchar := p_id ;
    begin
        return query 
        select a, b, c, d, e, f
    from crosstab(
    $ct_query_1$
  select distinct
     1 as id, s.a, tmp.a
    from 
    "source" s 
    left join
    (
        select distinct 
        tbl.a, tbl.b
        from tableA tbl 
        where tableA.colc = v_id
        ...
        
    ) as tmp on s.source_name = tmp.source
    order by 1, 2 asc;
    $ct_query_1$,
    $a$VALUES ('a'), ('b'), ('c'),('d'), ('e')$a$  
    
    ) as ct (id int, a varchar(20),b varchar(20) , c varchar(20),  d varchar(20), e varchar(20));
    end; 
    $fn$

标签: sqlpostgresqlplpgsql

解决方案


使用format

SELECT ...
FROM crosstab(
    format(
        $ct_query_1$SELECT ...
                    WHERE tableA.colc = %L
                    ...$ct_query_1$,
        v_id
    ),
    $a$VALUES ('a'), ('b'), ('c'), ('d'), ('e')$a$
)

%L是字符串文字的占位符。


推荐阅读