如何将SELECT语句分配给变量并使用PostgreSQL执行该变量
我试图将“SELECT”查询分配给变量,然后希望执行该变量并显示结果,但在引用单引号时被卡住了 示例:如何将SELECT语句分配给变量并使用PostgreSQL执行该变量,postgresql,Postgresql,我试图将“SELECT”查询分配给变量,然后希望执行该变量并显示结果,但在引用单引号时被卡住了 示例: create or replace function test() returns setof record as $BODY$ Declare query1 varchar; Begin query1 := SELECT DISTINCT c."Name", c."Address" INTO temptable FR
create or replace function test() returns setof record as
$BODY$
Declare
query1 varchar;
Begin
query1 := SELECT DISTINCT c."Name", c."Address"
INTO temptable
FROM table1 l
INNER JOIN tablename c on l."Name" = c."Name"
ORDER BY "Name";
/* Here need to execute query1 and get result of it */
end;
$BODY$
language plpgsql;
问题:如何为select语句提供正确的单引号并执行它?我假设您并不真正想要一个
select。。变成代码>因为这是创建表作为选择的非标准(过时、历史)语法
当您将函数声明为“返回记录集”时,我假设您实际上想要返回一个结果集。最好使用返回表(…)
,因为这样函数的使用就更容易了
最后,我看不出这里使用动态SQL的原因,但我假设您没有告诉我们全部情况
以下各项应有效(未经测试):
这假设Name
和Address
都是varchar
或text
列。如果不是,则需要调整返回表(文本,文本)
部分
但鉴于您的示例,不需要动态SQL,甚至不需要PL/pgSQL,一个简单的SQL函数就可以了(而且通常会快得多):
您还应该避免使用带引号的标识符。从长远来看,它们带来的麻烦比它们的价值还多。只需创建表而不引用列名
create or replace function test()
returns table (name text, address text)
as
$BODY$
Declare
query1 varchar;
Begin
query1 := 'SELECT DISTINCT c."Name", c."Address"
FROM table1 l
INNER JOIN tablename c on l."Name" = c."Name"
ORDER BY "Name"';
return query execute query1;
end;
$BODY$
language plpgsql;
create or replace function test()
returns table (name text, address text)
as
$body$
SELECT DISTINCT c."Name", c."Address"
FROM table1 l
INNER JOIN tablename c on l."Name" = c."Name"
ORDER BY "Name"';
$body$
language sql;