例如:现有表table1,字段id,name,address,其中id为主键
插入语句insert into table1(id,name,address)values("01001","影子","河北")
如何在插入时进行判断table1中是否存在01001的记录,若不存在则插入,若存在则更新01001的name和address内容
在网上查了一下,表间更新时用merge into就可以,像我上面的情况有没有办法实现呢?
插入语句insert into table1(id,name,address)values("01001","影子","河北")
如何在插入时进行判断table1中是否存在01001的记录,若不存在则插入,若存在则更新01001的name和address内容
在网上查了一下,表间更新时用merge into就可以,像我上面的情况有没有办法实现呢?
解决方案 »
- oracle 11g em重建,提示口令无效。口令用pl/SQL都能登录,就EMCA说无效!
- oracle使用imp导入数据问题
- 急求oracle client 9 dll文件!!!!
- 在线求问表分区问题
- 怎么把一个sql server查询树结构 的函数转换成oracle的函数
- 客户端可以连接(sqlplus),但命令行不行(sqlplus system/manager@test)
- oracle error 12705 encounted??
- 关于oracle+tomcat+jdbc的问题
- 【help】怎样能取得数据库里当前最大的id号?怎样取得一段时间内新加入的数据?
- 密码问题
- 怎么连接测试老是不成功啊
- 分类查询的问题,很简单,但是我不会
--测试数据
create table table1(id varchar2(100),name varchar2(1000),address varchar2(1000));
insert into table1(id,name,address)values('01001','影子','河北') ;
commit;--插入
merge into table1 t1
using (select '01002' id,'影子' name,'河北' address from dual) t2
on (t1.id = t2.id)
when matched then
update set t1.name = t2.name, t1.address = t2.address
when not matched then
insert values (t2.id, t2.name,t2.address);
commit;--查询结果
select * from table1
01001 影子 河北
01002 影子2 辽宁--更新
merge into table1 t1
using (select '01001' id,'不是影子' name,'山西' address from dual) t2
on (t1.id = t2.id)
when matched then
update set t1.name = t2.name, t1.address = t2.address
when not matched then
insert values (t2.id, t2.name,t2.address);
commit;
--查询结果
select * from table101001 不是影子 山西
01002 影子2 辽宁--删除测试数据
drop table table1;
将数据虚拟成表不就行了
insert into ... ;
insert into Table (ID,Value,..) values(1001,'222',...);
commit;
exception
when dup_val_on_idx then
update Table set value = '222' where id = 1001;
commit;
when others then
Rollback;
end;
如果不能批处理,像上面几位写的用merge into或者用过程都不太好弄。