我正在使用PostgreSQL v12
我想动态更新表的列值 列名和值被赋予其他表的地方
tage表
|key |A |B |C |D |E |
|k1 |N |N |N |N |N |
|k2 |N |N |N |N |N |
|k3 |N |N |N |N |N |
其他表
|key|column_name|value|
|k1 |A |3 |
|k2 |B |2 |
|k2 |C |1 |
我想要做的是如下更新目标表
|key |A |B |C |D |E |
|k1 |3 |N |N |N |N |
|k2 |N |2 |1 |N |N |
|k3 |N |N |N |N |N |
给出了目标表和其他表,因此无法修改表结构
我是sql的新手。
我在postgresql v11上运行了此查询,并且在v12上出现syntex错误时,它仍然有效
CREATE OR REPLACE FUNCTION upadate_func()
RETURNS void AS
$BODY$
DECLARE
r table1%rowtype;
lr text;
BEGIN
-- r is a structure that contains an element for each column in the select list
FOR r IN select * from table1
LOOP
lr := LOWER(r.item);
EXECUTE 'IF ' || '''' || lr || '''' || ' IN (SELECT item FROM table2) THEN' ||
' UPDATE table3' ||
' SET ' || lr || ' = ' || r.value ||
' WHERE key = ' || '''' || r.key || '''' ||
' AND date1 = ' || 'CAST(' || '''' || r.date1 || '''' || ' AS TIMESTAMP)' ||
' AND datafmt = ' || '''' || r.datafmt || '''' ||
' AND date2 >= '|| 'CAST(' || '''' || r.date2 || '''' || ' AS TIMESTAMP);' ||
' END IF;';
END LOOP;
END
$BODY$
LANGUAGE plpgsql;
SELECT upadate_func();
它引起如下错误
错误:“ IF”处或附近的语法错误
如果陈述行之有效,则打印并打印
怎么了?