如果STATEMENT引发语法错误,则执行Postgresql 12 EXECUTE STATEMENT

时间:2019-11-08 09:18:32

标签: sql postgresql

我正在使用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 |
  1. 给出了目标表和其他表,因此无法修改表结构

  2. 我是sql的新手。

  3. 我在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”处或附近的语法错误

如果陈述行之有效,则打印并打印

怎么了?

0 个答案:

没有答案