postgresql - 用未绑定的 PostgreSQL 游标完全替换记录
问题描述
是否可以使用未绑定的游标来完全编辑和替换表中的一行?
我正在使用未绑定游标,因为该表是使用参数动态指定的,但由于未指定列,因此我不能使用“UPDATE table SET column = value WHERE”语法。
CREATE OR REPLACE FUNCTION trim_table(in_table TEXT) AS $$
DECLARE
ref REFCURSOR;
current_row RECORD;
BEGIN
OPEN ref FOR EXECUTE 'SELECT * FROM '|| quote_ident(in_table);
LOOP
FETCH ref INTO current_row;
EXIT WHEN NOT FOUND;
current_row = my_row_function(current_row);
/*How can I replace my row here?*/
END LOOP;
CLOSE ref;
END
$$ LANGUAGE plpgsql;
我找到的所有示例和答案仅显示如何更新单个字段而不是完整记录。
解决方案
我认为这段代码可以在某些方面帮助你:
select
string_agg('UPDATE '||table_schema||'.'||table_name||chr(13)||' SET '||column_name||' = TRIM('||column_name||')', '; '||chr(13)) into query
from information_schema.columns
where data_type in ('varchar', 'text')
and table_schema = 'your_schema'
and table_name = 'your_table_name';
execute query;
把它放在你的过程中,修改它以方便你,你将不再需要这个循环。
推荐阅读
- c - 嵌套在结构中的联合中的值未更新
- vba - 将带有文件名的 Word 文件保存为递增数字
- javascript - 如何将响应返回到控制台
- javascript - 使用 Yup 验证不需要的表单字段?
- java - 来自外部类的片段中的 SetText
- node.js - 如何将已经运行的数据库连接传递到 mongo 存储以存储会话
- asp.net - 使用 .NET Web Api 授权 .NET 5 Core MVC Web 应用程序
- c++ - 错误:变量周围的堆栈已损坏
- javascript - 异步等待 promise.all 和多个 API
- google-calendar-api - 私人 Google 日历中的公开活动