如何在嵌套的双美元符号交叉表查询中使用 postgres 参数
How to use a postgres parameter in a nested double dollar sign crosstab query
我无法弄清楚如何在 $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$
使用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
是字符串文字的占位符。
我无法弄清楚如何在 $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$
使用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
是字符串文字的占位符。