如何在PostgreSQL中使用变量表更新?
例如:如何在PostgreSQL中使用变量表更新?,sql,postgresql,sql-update,dynamic-sql,plpgsql,Sql,Postgresql,Sql Update,Dynamic Sql,Plpgsql,例如: Table=["category1","category2","category3"] for varTable in Table: cr.execute('update varTable SET id=%s,WHERE id=%s) ........ .... 如何执行此循环?为此使用动态SQL。默认情况下,将plpgsql与一起使用。 创建函数或使用DO语句进行临时执行 动态结构化查询语言 电话: 有很多类似的答案。有关更多示例和说明,请搜索并执行
Table=["category1","category2","category3"]
for varTable in Table:
cr.execute('update varTable SET id=%s,WHERE id=%s)
........
....
如何执行此循环?为此使用动态SQL。默认情况下,将plpgsql与一起使用。
创建函数或使用
DO
语句进行临时执行
动态结构化查询语言
电话:
有很多类似的答案。有关更多示例和说明,请搜索并执行EXECUTE
纯SQL
如果plpgsql对您来说仍然是一个黑魔法,那么您可以通过修改数据的CTE非常有效地解决这个简单的问题。需要PostgreSQL 9.1-for
为此,请使用动态SQL。默认情况下,将plpgsql与一起使用。
创建函数或使用
DO
语句进行临时执行
动态结构化查询语言
电话:
有很多类似的答案。有关更多示例和说明,请搜索并执行EXECUTE
纯SQL
如果plpgsql对您来说仍然是一个黑魔法,那么您可以通过修改数据的CTE非常有效地解决这个简单的问题。需要PostgreSQL 9.1-for
@John.zero:我添加了一个简单的SQL替代方案。:)如果我有很多表要更改,纯SQL将太长。我只需在Postgre SQL中尝试动态SQL。出现错误“错误:运算符不唯一:未知| |文本[]第2行:更新“| | | | | |”^”@John.zero:我的错误,修复了查询。我需要在:创建或替换函数f|up中添加一个变量(varTable,_new_id int,_old_id int),如何更改代码?@John.zero:我添加了一个纯SQL替代方案。:)如果我有很多表要更改,纯SQL将太长。我只需在Postgre SQL中尝试动态SQL。出现错误“错误:运算符不唯一:未知| text[]第2行:更新“|| | | tbl |”^”@John.zero:我的错误,修复了查询。我需要在中添加一个变量:创建或替换函数f_up(varTable,_new_id int,_old_id int),如何更改代码?
CREATE OR REPLACE FUNCTION f_up(_new_id int, _old_id int)
RETURNS void AS
$BODY$
DECLARE
_tbl text[] := '{category1,category2,category3}';
t text;
BEGIN
FOREACH t IN ARRAY _tbl
LOOP
EXECUTE '
UPDATE ' || t || '
SET id = $1
WHERE id = $2'
USING _new_id, _old_id;
END LOOP;
END;
$BODY$ LANGUAGE plpgsql;
SELECT f_up(23, 45);
WITH vals AS (
SELECT 23 AS new_id, 45 AS old_id -- provide values once
)
, a AS (
UPDATE category1
SET id = v.new_id
FROM vals v
WHERE id = v.old_id
)
, b AS (
UPDATE category2
SET id = v.new_id
FROM vals v
WHERE id = v.old_id
)
UPDATE category3
SET id = v.new_id
FROM vals v
WHERE id = v.old_id;