gpt4 book ai didi

postgresql - 如何在 plpgsql 中引用模式变量

转载 作者:行者123 更新时间:2023-11-29 14:19:19 25 4
gpt4 key购买 nike

我正在尝试学习 plpgsql 代码以自动执行数据库中的某些数据清理。

我当前的任务是将数字字段中的所有“999”值替换为“NaN”。我想做的是:1) 查找模式中的所有数字列2)遍历这些并使用“更新/替换”

我的代码如下。我认为我的主要问题是找出如何在更新语句中引用 schema.table(但我确信还有其他事情我做得不太好)。

我收到的错误是无法识别该关系。任何帮助将不胜感激

贝琪

CREATE OR REPLACE FUNCTION household.nodata_replace(schemanm text)
RETURNS VOID as $$
DECLARE
cname text;
tname text;
BEGIN
--FOR col IN
for cname,tname in SELECT column_name::text,table_name::text FROM information_schema.columns
where table_schema = schemanm and data_type in ('integer','double precision')

LOOP

RAISE NOTICE 'cname is: % from %', cname, tname;
EXECUTE 'update '||schemanm::regclass||'.' ||tname::regclass||
' set ' || quote_ident(cname) ||' = replace(' || quote_ident(cname) ||', 999, NaN);';
END LOOP;


END;
$$
LANGUAGE plpgsql;

最佳答案

尝试像下面这样重新处理您的查询:

EXECUTE 'update '|| (schemanm||'.'||tname)::regclass ||' set ' || quote_ident(cname) ||' = ''NaN'' WHERE '|| quote_ident(cname) ||' = 999;'

因为转换为 regclass 试图在已注册的关系中进行搜索。模式不是关系。

或者你可以

EXECUTE 'update '|| quote_ident(schemanm)||'.'||quote_ident(tname) ||' set ' || quote_ident(cname) ||' = ''NaN'' WHERE '|| quote_ident(cname) ||' = 999;'

关于postgresql - 如何在 plpgsql 中引用模式变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35420590/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com