如果存在特定ID,我的查询会更新表,否则会插入新值。
我想实现像 - :
这样的东西public class ApplicationDbContext :DbContext
{
public ApplicationDbContext()
: base("MySQLConnectionString")
{
}
public DbSet<Sector> Sectors { get; set; }
public DbSet<Campus> Campuss { get; set; }
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}
我现有的查询是
if(exists){
update table,
flag = 0}
else{
insert into table,
flag = 1}
return flag;
答案 0 :(得分:1)
运行MERGE
时,您可以使用SQL%ROWCOUNT
来获取受影响的行数。但是,您无法确定是否应用了插入或更新,甚至是更新了多少行以及插入了多少行。因此,您必须事先检查相关行是否存在。而且,那么你知道要更新或插入自己,所以你不再需要MERGE
。
DECLARE
v_count integer;
BEGIN
select count(*) into v_count
from fcm_device_registration
where device_ad_id = 1;
if v_count = 0 then
insert into fcm_device_registration
(device_ad_id, fcm_notification_id) values (1, 'Y');
else
update fcm_device_registration
set fcm_notification_id = 'N', last_update_date = sysdate
where device_ad_id = 1;
end;
END;
变量v_count
包含0或1(正如您所说,device_ad_id在表中是唯一的)。更新为1,插入为0。正好与你想要的相反。但是,您可以通过以下方式轻松派生您的旗帜:v_flag := 1 - v_count
。
答案 1 :(得分:1)
BEGIN
update fcm_device_registration
set fcm_notification_id='N',
last_update_date = SYSDATE
where device_ad_id = 1;
--in case of no update
if sql%rowcount = 0 then
insert into fcm_device_registration(device_ad_id,fcm_notification_id) values (1,'Y');
dbms_output.put_line('insert');
else
dbms_output.put_line('update');-- in case of record update
end if;
END;