您可以使用
MERGE 语句尝试相同的行为:
例如,创建目标表:
CREATE TABLE target
(
id SERIAL PRIMARY KEY CONSTRAINT pk_tst,
name CHAR(1),
age SMALLINT
);
创建一个临时源表并插入所需记录:
CREATE TEMP TABLE source
(
id INT,
name CHAR(1),
age SMALLINT
) WITH NO LOG;
INSERT INTO source (id, name, age) VALUES (1, 'A', 19);
合并操作将会是:
MERGE INTO target AS t
USING source AS s ON t.id = s.id
WHEN MATCHED THEN
UPDATE
SET t.name = s.name, t.age = s.age
WHEN NOT MATCHED THEN
INSERT (id, name, age)
VALUES (s.id, s.name, s.age);
您会看到记录已经插入,然后您可以:
UPDATE source
SET age = 20
WHERE id = 1;
并再次测试合并操作。
另一种方法是创建一个存储过程,基本上您需要执行INSERT
语句并检查SQL错误代码,如果是-100
,则使用UPDATE
进行处理。
类似于:
CREATE PROCEDURE sp_insrt_target(v_id INT, v_name CHAR(1), v_age SMALLINT)
ON EXCEPTION IN (-100)
UPDATE target
SET name = v_name, age = v_age
WHERE id = v_id;
END EXCEPTION
INSERT INTO target VALUES (v_id, v_name, v_age);
END PROCEDURE;