postgresql - 将查询作为字符串变量执行并存储在表中
问题描述
我有一个简单的代码,如下所示。我有一个表 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 相关文档,不太确定如何实现上述目标。我是新手,任何帮助将不胜感激。
解决方案
您可以编写这样的函数并将条件作为参数传递:
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 中的行数。
推荐阅读
- python - 如何始终在 numpy 中四舍五入 XX.5
- swift - Admob 不显示广告
- python - 将纬度/经度转换为 XY 的有效方法
- flutter - 如何使 ReorderableListView ListTile 在 Flutter 的按钮/图标按下时可拖动?
- reactjs - 设置材质 UI 复选框的初始值
- c++ - 以下代码在并发情况下的可能结果是什么?
- css - 如何在 Webpack 4 中启用 SASS 模块
- git - git checkout 到较早的分支不会更改代码
- html - 如何在不使用绝对定位和 z-index 的情况下使溢出可见?
- cron - 从晚上 11.30 到凌晨 01.30,每 15 分钟运行一次 CronJob