例如:现有表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就可以,像我上面的情况有没有办法实现呢?
解决方案 »
- 通过oracle11g的dataguard来实现查询,生产库分离
- 为什么我的oracle数据的安装文件夹里只有几十兆
- oracle中行转列的问题
- 可以在 oracle 中写一个 limit 函数吗
- 合并SQL语句
- 在plsql中select * from 一个有二十多万记录的表,等了亮分多钟后报错:内存溢出
- Win2K中的MSDAORA.1连接到oracle的驱动丢失,请问如何重新安装?
- 怎么判断insert into操作产生了例外?——急呀
- 求一个oracle简单问题!!急
- expdp导出时,不能导出逻辑目录(directory)吗???
- 怎么连接测试老是不成功啊
- 分类查询的问题,很简单,但是我不会
--测试数据
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或者用过程都不太好弄。