oracle 有记录就更新没有添加问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 有记录就更新没有添加问题相关的知识,希望对你有一定的参考价值。

我想写了SQL语句对一个表的数据进行添加或更新比如SID为表的主键如果SID存在了,我就跟具SID来更新这条记录如果SID不存在,就添加一条SQL记录 我在现在的做法是在程序里跟具SID来查询记录是否成在不存在就添加,存在就修改  能不能用一个SQL语句来实现,具体怎么实现,不用存储过程哦    

参考Oracle 的SQL Reference,可以看到Merge Statement的语法如下:
MERGE [hint] INTO [schema .] table [t_alias] USING [schema .]
table | view | subquery [t_alias] ON ( condition )
WHEN MATCHED THEN merge_update_clause
WHEN NOT MATCHED THEN merge_insert_clause;

例如:
SQL> merge into acct a
2 using subs b on (a.msid=b.msid)
3 when MATCHED then
4 update set a.areacode=b.areacode
5 when NOT MATCHED then
6 insert(msid,bill_month,areacode)
7 values(b.msid,'200702',b.areacode);
参考技术A 1:create table zyh (sid number(10), zname nvarchar2(10));
2:create unique index idx_zyh on zyh(sid);
merge into zyh a
using (select param_SID,param_zname from dual) c
on a.sid=c.param1
when matched then
update a.zname=c.param_zname
when not matched then
insert into a (sid,zname) values (c.param_sid,c.param_zname);
3:param_sid,param_zname 为传进来的参数;

ORACLE数据库有数据就更新没有就插入怎么做?

if 1>0
then
insert into TEST (ID,NAME) VALUES (1,'AA')
else
update TEST set NAME='BB' where ID=1
end if

这么写不可以吗?总是报错!用MERGER如何写?

参考技术A 1,
if 1>0
then
insert into TEST (ID,NAME) VALUES (1,'AA');
else
update TEST set NAME='BB' where ID=1;
end if

2.
begin
update TEST set NAME='BB' where ID=1;

if sql%notfound then
insert into TEST (ID,NAME) VALUES (1,'AA');
end if;
end;

3.MERGER into TEST a using (select * from TEST) b on (a.id = b.id) when matched then
update TEST set NAME='BB'
when not matched then
nsert into TEST (ID,NAME) VALUES (1,'AA');本回答被提问者采纳

以上是关于oracle 有记录就更新没有添加问题的主要内容,如果未能解决你的问题,请参考以下文章

ORACLE数据库有数据就更新没有就插入怎么做?

mysql更新字段记录没有则添加

Oracle - 无法使用绑定变量更新表记录

ORACLE 如果任何字段更改,则添加新记录

如果记录存在,Oracle 存储过程会更新行

如何识别 Oracle 中最近更新的记录?