IF语句中的Postgresql 12 EXECUTE语句引发语法错误
我正在使用PostgreSQL v12 我想动态更新表的列值 其中,列名称和值被指定给其他表 塔吉特表IF语句中的Postgresql 12 EXECUTE语句引发语法错误,sql,postgresql,Sql,Postgresql,我正在使用PostgreSQL v12 我想动态更新表的列值 其中,列名称和值被指定给其他表 塔吉特表 | key | A | B | C | D | E| |k1 | N | N | N | N| |k2 | N | N | N | N| |k3 | N | N | N | N| 其他表格 |键|列|名称|值| |k1 | A | 3| |k2 | B | 2| |k2 | C | 1| 我要做的是更新目标表,如下所示 | key | A | B | C | D | E| |k1 | 3
| key | A | B | C | D | E|
|k1 | N | N | N | N|
|k2 | N | N | N | N|
|k3 | N | N | N | N|
其他表格
|键|列|名称|值|
|k1 | A | 3|
|k2 | B | 2|
|k2 | C | 1|
我要做的是更新目标表,如下所示| key | A | B | C | D | E|
|k1 | 3 | N | N | N|
|k2 | N | 2 | 1 | N | N|
|k3 | N | N | N | N|
选择upadate_func();
它引起如下错误
错误:在“IF”处或附近出现语法错误
如果报表运行良好,则打印
怎么了 SQL中没有
IF
。SQL中有case当construct时。那么为什么IF语句在没有执行的情况下运行良好?那么给定的代码是否可以替换“IF..Then..end IF”到“case when..Then..end case”?Postgres execute语句的格式是“执行。SQL语句不能以IF开头,甚至不能在文本中包含IF。如果。。。EXECUTE有效,因为IF是有效的plpgsql语句。至于更改为CASE,也不能开始sql语句。您必须始终记住,在代码的当前状态下,您的语句在两种语言(SQL或plpgsql)中的哪一种是有效的。
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;