【发布时间】:2019-07-12 11:23:26
【问题描述】:
我想创建访问 CTE 表内部 IF 子句的 upsert 函数,但我发现错误:
错误:在“ON”处或附近出现语法错误
第 12 行:从冲突列表中选择 id 999 (id) ^
**********错误**********
错误:在“ON”或附近出现语法错误 SQL 状态:42601 字符:346
hasil_perhitungan 表中的数据:
----------
id + hasil
---+------
21 + 666
22 + 777
23 + 777
24 + 777
25 + 777
---+------
list_di 中的数据:
---
id
---
19
20
21
---
我必须试试这个:
postgres syntax error at or near "ON"
和
CREATE OR REPLACE FUNCTION coba(input_data integer)
RETURNS void AS
$BODY$
BEGIN
IF EXISTS (SELECT id, CASE WHEN id = input_data THEN 'OK' END FROM hasil_perhitungan)
THEN
WITH result AS (
SELECT id FROM hasil_perhitungan)
, list AS (
SELECT id FROM list_di)
INSERT INTO hasil_perhitungan
SELECT id , 999 FROM list ON CONFLICT (id)
UPDATE SET hasil = 888;
END IF;
END;
$BODY$
LANGUAGE plpgsql;
当我使用 IF 语句和整数参数执行函数时,我已经预料到了该函数可以访问 IF 语句内部的 CTE 表。所以 当我运行函数时:
SELECT coba(25);
函数将插入和更新,所以我得到:
Data in hasil_perhitungan table :
----------
id + hasil
---+------
19 + 999
20 + 999
21 + 888
22 + 777
23 + 777
24 + 777
25 + 777
---+------
【问题讨论】:
标签: postgresql function upsert