1.删除1980年雇员的雇员信息;
delete from myemp
where hiredate between to_date(‘1980-1-1‘,‘yyyy-mm-dd‘)
and to_date(‘1980-12-31‘,‘yyyy-mm-dd‘) ;
执行上述语句后其实还没有真正意义上的更新,必须执行下面的语句才会彻底删除,否则其他session会话查询的时候,1980年的员工信息还依然存在。但是当你退出之后Oracle会自动commit的。
COMMIT WORK;
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2、事务操作命令
S1:SCOTT用户分别登录两个SQL PLUS窗口是session1和session2;
S2:窗口session1和session2分别查看myemp数据表信息;
S3:窗口session1,执行语句:
INSERT
INTO myemp(empno,ename,hiredate, job, sal)
VALUES(1234,‘李兴华‘,to_date(‘1989-09-19‘,‘yyyy-mm-dd‘),‘MANAGER‘,3000);
UPDATE MYEMP
SET SAL=5000 WHERE EMPNO=1234;
SAVEPOINT SP_A;
SELECT count(*) FROM myemp;
结果:
切换窗口session2,执行语句:
SELECT count(*) FROM myemp;
结果:
S4:窗口session1,执行语句:
INSERT
INTO myemp(empno,ename,hiredate, job, sal)
VALUES(5678,‘董鸣楠‘,to_date(‘2003-07-27‘,‘yyyy-mm-dd‘), ‘HR‘,2000);
UPDATE myemp
SET job=‘CEO‘ WHERE empno=5678;
SAVEPOINT SP_B;
SELECT count(*) FROM myemp;
结果:
切换窗口session2,执行语句:
SELECT count(*) FROM myemp;
结果:
S5:窗口session1,执行语句:
DELETE FROM myemp;
SELECT count(*) FROM myemp;
结果:
切换窗口session2,执行语句:
SELECT count(*) FROM myemp;
结果:
S6:窗口session1,执行语句:
S6:窗口session1,执行语句:
--使用回滚到节点sp_B
ROLLBACK TO SP_B;
SELECT count(*) FROM myemp;
ROLLBACK TO SP_A;
SELECT count(*) FROM myemp;
ROLLBACK;
SELECT count(*) FROM myemp
S7:窗口session1,执行语句:
INSERT
INTO myemp(empno,ename,hiredate, job, sal)
VALUES(5678,‘董鸣楠‘,to_date(‘2003-07-27‘,‘yyyy-mm-dd‘), ‘HR‘,2000);
UPDATE myemp
SET job=‘CEO‘ WHERE empno=5678;
COMMIT;
SELECT count(*) FROM myemp;
结果:
切换窗口session2,执行语句:
SELECT count(*) FROM myemp;
结果:
---上述主要实验的目的是想让读者明白设置保存节点,与事件回滚的用法,还有就是使用删除语句和插入语句必须使用commit语句,不然只是视图显示出来你要的结果而已,其它session会话看不见操作,虽然退出Oracle后他会自动commit,但是保险起见还是commit,其他session在同一时间登录的才可以看到更新操作。