如何在插入新值之前检查复合主键

时间:2017-01-31 08:29:59

标签: sql oracle stored-procedures

我有一个包含多个列的表,其中包含三个复合主键(列customer_id,system_origin,policy_number)。 该表创建如下:

Create table LOST_MEMBER_ACCESS_LOG (
Customer_id varchar2(20) NOT NULL,
System_Origin varchar2(20) NOT NULL,
Policy_Number varchar2(20) NOT_NULL, 
PRIMARY_KEY(Customer_id,System_Origin, Policy_Number)
);

我需要编写一个存储过程,如果对于customer_id,system_origin,policy_number的唯一组合已存在行,则第一次检查,然后它使用新值更新已存在的行,否则它会插入新行。

1 个答案:

答案 0 :(得分:1)

您要说的是:

if row exists then
   update ...
else
   insert ...
end if;

但是有更简单的方法。只需进行更新并检查是否触摸了任何行

update lost_member_access_log 
   set ...
 where ... ;
if sql%rowcount = 0 then
   insert into lost_member_access_log ...
end if;

MERGE当然也是一种选择。