我有一些随机更新语句,例如:
UPDATE tab1 SET a = 'a', b = 'b' WHERE id = 1;
UPDATE tab2 SET c= = 'c' WHERE id = 2;
UPDATE tab1 SET a = 'a', d = 'd' WHERE id = 3;
.
.
.
UPDATE tab1 SET a = 'a', b = 'b' WHERE id = 100;
我需要在PLSQL内部插入这些多个语句。我发现一次一个地插入语法:
begin
insert into tab1 (a,b);
values ('a', 'b');
exception
when dup_val_on_index then
UPDATE tab SET a = 'a', b = 'b' WHERE id = 1;
end
我不关心并发性,我需要立即插入许多更新语句(因为我使用的是Oracle APEX并且只有一个pl / sql表来完成所有这些)。
TAB1:
| ID | A | B | D |
TAB2:
| ID | D |
答案 0 :(得分:3)
我认为通过答案可以更容易解释。
看看这个MERGE声明
MERGE INTO tab1 tab1
USING
(SELECT 'a' a, 'b' b, null c, null d, 1 id from dual
UNION ALL
SELECT null a, null b, 'c' c, null d, 2 id from dual
UNION ALL
SELECT 'a' a, null b, null c, 'd' d, 3 id from dual
UNION ALL
SELECT 'a' a, 'b' b, null c, null d, 100 id from dual) my_table
ON ( tab1.id = my_table.id)
WHEN MATCHED THEN UPDATE SET tab1.a=my_table.a, tab1.b=my_table.b,
tab1.c=my_table.c, tab1.d=my_table.d
WHEN NOT MATCHED THEN INSERT (id, a, b, c, d)
VALUES (my_table.id, my_table.a, my_table.b, my_table.c, my_table.d)
我没有使用任何第二个数据库表,我只是使用您在上面示例中提供的值:
UPDATE tab1 SET a = 'a', b = 'b' WHERE id = 1;
UPDATE tab2 SET c= = 'c' WHERE id = 2;
UPDATE tab1 SET a = 'a', d = 'd' WHERE id = 3;
.
.
.
UPDATE tab1 SET a = 'a', b = 'b' WHERE id = 100;
那变成" my_table"。然后您可以相应地更新或插入。
我不是100%上面示例中的唯一值是什么。
您只插入列(a,b),但是如果dup_val_on_index ...那么基于id列进行更新... tab1上的唯一约束是什么?