oracle merge及其他方式实现存在更新不存在插入操作
来源:互联网 发布:软件测试考试题库 编辑:程序博客网 时间:2024/05/21 09:55
create or replace procedure testUpdate is
sqlexecutedate date; --sql开始执行时间
errorcode varchar(255); --sql异常码
executemessage varchar(255); --sql执行信息
executenum number(20) default 0; --sql执行条数
commitnum number(20) default 0; --sql执行条数
isexists number;
begin
sqlexecutedate:=sysdate;
declare Cursor policys
is
select
sno sno,
name name,
sex sex,
flag flag
from astudent1
--where updatetime like trunc(sysdate)
;
policy policys%rowtype--游标变量policy
;
--executenum := sql%rowcount
--;
begin
for policy in policys
loop
executenum:=executenum+1;
--update astudent2 set name=policy.name,sex=policy.sex,updatetime=sysdate where sno=policy.sno
select count(1) into isexists from astudent2 where sno=policy.sno;
--dbms_output.put_line('isesixt:'||isexists);
if isexists>0 then
dbms_output.put_line(executenum||':update');
update astudent2 set name=policy.name,sex=policy.sex,updatetime=sysdate where sno=policy.sno and exists (select sno from astudent2 where sno=policy.sno);
else
dbms_output.put_line(executenum||':insert');
insert into astudent2(sno,name,sex,flag,inserttime,updatetime)values(policy.sno,policy.name,policy.sex,policy.flag,sysdate,sysdate);
end if;
/* merge into astudent2 s2
using (select sno sno, name name,sex sex,flag flag from astudent1) s1
on (s2.sno = s1.sno)
when matched then
update set s2.name=s1.name, s2.sex=s1.sex,s2.flag='update', s2.updatetime=sysdate
when not matched then
insert values(s1.sno,s1.name,s1.sex,'insert',sysdate,sysdate); */
if mod(executenum,5)=0 then
commitnum:=commitnum+1;
dbms_output.put_line('第'||commitnum||'次提交数据');
commit;
end if
;
end loop;
dbms_output.put_line('共更新'||executenum||'条数据');
commit;
end;
dbms_output.put_line('耗时:'||(sysdate-sqlexecutedate)*24*60*60*1000||'ms');
dbms_output.put_line('startdate:'||to_char(sqlexecutedate,'YYYY-MM-DD HH24:MI:SS ssss'));
dbms_output.put_line('startdate:'||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS ssss'));
exception
when others then
executemessage:=substr(sqlerrm,1,251);
errorcode:=sqlcode;
dbms_output.put_line('异常:'||executemessage);
dbms_output.put_line('异常code:'||errorcode);
rollback;
end ;
sqlexecutedate date; --sql开始执行时间
errorcode varchar(255); --sql异常码
executemessage varchar(255); --sql执行信息
executenum number(20) default 0; --sql执行条数
commitnum number(20) default 0; --sql执行条数
isexists number;
begin
sqlexecutedate:=sysdate;
declare Cursor policys
is
select
sno sno,
name name,
sex sex,
flag flag
from astudent1
--where updatetime like trunc(sysdate)
;
policy policys%rowtype--游标变量policy
;
--executenum := sql%rowcount
--;
begin
for policy in policys
loop
executenum:=executenum+1;
--update astudent2 set name=policy.name,sex=policy.sex,updatetime=sysdate where sno=policy.sno
select count(1) into isexists from astudent2 where sno=policy.sno;
--dbms_output.put_line('isesixt:'||isexists);
if isexists>0 then
dbms_output.put_line(executenum||':update');
update astudent2 set name=policy.name,sex=policy.sex,updatetime=sysdate where sno=policy.sno and exists (select sno from astudent2 where sno=policy.sno);
else
dbms_output.put_line(executenum||':insert');
insert into astudent2(sno,name,sex,flag,inserttime,updatetime)values(policy.sno,policy.name,policy.sex,policy.flag,sysdate,sysdate);
end if;
/* merge into astudent2 s2
using (select sno sno, name name,sex sex,flag flag from astudent1) s1
on (s2.sno = s1.sno)
when matched then
update set s2.name=s1.name, s2.sex=s1.sex,s2.flag='update', s2.updatetime=sysdate
when not matched then
insert values(s1.sno,s1.name,s1.sex,'insert',sysdate,sysdate); */
if mod(executenum,5)=0 then
commitnum:=commitnum+1;
dbms_output.put_line('第'||commitnum||'次提交数据');
commit;
end if
;
end loop;
dbms_output.put_line('共更新'||executenum||'条数据');
commit;
end;
dbms_output.put_line('耗时:'||(sysdate-sqlexecutedate)*24*60*60*1000||'ms');
dbms_output.put_line('startdate:'||to_char(sqlexecutedate,'YYYY-MM-DD HH24:MI:SS ssss'));
dbms_output.put_line('startdate:'||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS ssss'));
exception
when others then
executemessage:=substr(sqlerrm,1,251);
errorcode:=sqlcode;
dbms_output.put_line('异常:'||executemessage);
dbms_output.put_line('异常code:'||errorcode);
rollback;
end ;
0 0
- oracle merge及其他方式实现存在更新不存在插入操作
- Oracle 存在 更新 ,不存在插入 Merge into用法总结
- Oracle存在则更新,不存在则插入应用-merge
- oracle 实现 存在记录就更新,不存在就插入 merge into
- Oracle 用merge 实现对一张表的操作存在则修改不存在则插入
- mysql如何实现插入数据时如果不存在则插入如果存在则更新的操作
- Oracle触发器实现更新一张表数据时判断另一张表是否存在,存在更新数据,不存在插入数据
- Oracle实现数据不存在则插入,数据存在则更新(insert or update)
- MySQL 如何实现插入时如果不存在则插入,如果存在则更新的操作?
- 如何实现插入时如果不存在则插入如果存在则更新的操作(分别用oracle、MySQL和SQL Server实现)
- mysql 存在更新 不存在插入
- oracle 存在则更新不存在则插入-方案
- oracle sql 记录存在则更新,不存在则插入
- Oracle存在则更新,不存在则插入应用
- Oracle存在则更新,不存在则插入应用
- sql 批量操作(存在的更新,不存在的插入)
- Oracle 的 merge 更新和插入操作
- mysql更新判断存在更新,不存在插入
- C++ GUI Qt4编程-创建主窗口
- linux如何开机自动运行自己的脚本
- WPF分页DataGrid
- android中的assets
- Hibernate如何检查脏数据
- oracle merge及其他方式实现存在更新不存在插入操作
- Javaweb学习第一天
- Linux内核启动顺序
- Greenplum中的vacuum和analyze
- ASEF(阅读笔记)
- 九度OJ 1434 今年暑假不AC
- HDU 1250(大数相加)
- 虚拟机VMware Workstation 7.1.4官方原版下载+激活密钥+汉化补丁
- C语言实现《设计模式之禅》之模板模式