首页 > 解决方案 > 将查询作为字符串变量执行并存储在表中

问题描述

我有一个简单的代码,如下所示。我有一个表 A,我想查询它并将结果存储在一个新表 B 中。为简单起见,假设 qty 和 price 是表 A 的两个字段。我的简单 sql 文件包含以下内容并且工作正常。

DROP TABLE IF EXISTS B;
CREATE TABLE B AS

SELECT *
FROM A
WHERE A.qty >10

现在我想通过将查询表示为字符串变量(比如 s)并动态更新字符串 s 来动态修改查询。假设字符串变量 s 原来是

s = 'SELECT * FROM A WHERE A.qty>10'

然后我们通过连接另一个字符串来即时更新它,如下所示:

s = 'SELECT * FROM A WHERE A.qty>10 AND A.price >30'

我想将 s 作为查询执行并将结果保存在表 B 中。

我阅读了 postgresql 的动态 sql 相关文档,不太确定如何实现上述目标。我是新手,任何帮助将不胜感激。

标签: postgresql

解决方案


您可以编写这样的函数并将条件作为参数传递:

create or replace function add_table_b(s text) returns int as $$

declare
rc int:=0;
query_ text:='';

begin

if(trim(s)= '') then
s='';
else
s=' where '||s;
end if;


DROP TABLE IF EXISTS B;
execute 'CREATE TABLE B AS SELECT * FROM A '|| s;
GET DIAGNOSTICS rc = ROW_COUNT;

return rc;

end;
$$
language plpgsql

此函数将返回插入到表 B 中的行数。


推荐阅读