源码-PL/SQL从入门到精通-第十一章-事务处理和锁定

来源:互联网 发布:mac lol 编辑:程序博客网 时间:2024/05/02 06:44

随笔:

基本概念早就知道,重点不在于会不会,而在于:会多少?做过什么?怎么做?我的需求你什么时候能实现?...

表锁定模式:row share, row exclusive, share lock, share row exclusive, exclusive,暂时不懂,还需继续努力。

--第11章开始--代码11.1 使用Commit语句提交事务DECLARE   dept_no   NUMBER (2) := 31;BEGIN   --开始事务   INSERT INTO dept         VALUES (dept_no, '市场部', '北京');             --插入部门记录        INSERT INTO emp                                        --插入员工记录        VALUES (6993, '威尔', '销售', NULL, TRUNC (SYSDATE), 5000,300, dept_no);   --提交事务   COMMIT;END;select * from dept;select * from emp;DELETE FROM emp WHERE deptno=70;DELETE FROM dept WHERE deptno=70;COMMIT;--代码11.2 使用rollback语句回滚事务 (不回滚也没啥事吧?真个PL/SQL是作为一个整体执行的,一部分出错,整体都不执行吧)DECLARE   dept_no   NUMBER (2) := 71;BEGIN   --开始事务   INSERT INTO dept         VALUES (dept_no, '市场部', '北京');               --插入部门记录   INSERT INTO dept         VALUES (dept_no, '后勤部', '上海');               --插入相同编号的部门记录           INSERT INTO emp                                        --插入员工记录        VALUES (7997, '威尔', '销售人员', NULL, TRUNC (SYSDATE), 5000,300, dept_no);   --提交事务   COMMIT;EXCEPTION   WHEN DUP_VAL_ON_INDEX THEN                            --捕足异常     DBMS_OUTPUT.PUT_LINE(SQLERRM);                   --显示异常消息     ROLLBACK;                                           --回滚异常END;--代码11.3 使用保存点局部回滚DECLARE   dept_no   NUMBER (2) :=91;BEGIN   --开始事务   SAVEPOINT A;   INSERT INTO dept         VALUES (dept_no, '市场部', '北京');               --插入部门记录   SAVEPOINT B;      INSERT INTO emp                                        --插入员工记录        VALUES (7997, '威尔', '销售', NULL, TRUNC (SYSDATE), 5000,300, dept_no);           SAVEPOINT C;                   INSERT INTO dept         VALUES (dept_no, '后勤部', '上海');               --插入相同编号的部门记录   --提交事务   COMMIT;EXCEPTION   WHEN DUP_VAL_ON_INDEX THEN                            --捕足异常     DBMS_OUTPUT.PUT_LINE(SQLERRM);                   --显示异常消息     ROLLBACK TO B;                                      --回滚异常END;SELECT * FROM dept;DELETE FROM dept WHERE deptno=80;COMMIT;--代码11.4 只读事务使用示例DECLARE   v_1981 NUMBER(2);   v_1982 NUMBER(2);   v_1983 NUMBER(2);BEGIN   --SET TRANSACTION必须在事务的第1条语句,因此可以在COMMIT或ROLLBACK后面。   COMMIT;   SET TRANSACTION READ ONLY NAME '统计年度入职数据';     --使用NAME为事务命名   --使用SELECT语句执行查询   SELECT COUNT(empno) INTO v_1981 FROM emp WHERE TO_CHAR(hiredate,'YYYY')='1981';   SELECT COUNT(empno) INTO v_1982 FROM emp WHERE TO_CHAR(hiredate,'YYYY')='1982';   SELECT COUNT(empno) INTO v_1983 FROM emp WHERE TO_CHAR(hiredate,'YYYY')='1983';     COMMIT;  --终止只读事务   DBMS_OUTPUT.PUT_LINE('1981年入职人数:'||v_1981);   --显示统计的结果   DBMS_OUTPUT.PUT_LINE('1982年入职人数:'||v_1982);   DBMS_OUTPUT.PUT_LINE('1983年入职人数:'||v_1983);              END;   --记录锁定SELECT * FROM emp WHERE deptno=10 FOR UPDATE;COMMIT;--记录锁定(no wait)SELECT * FROM emp WHERE deptno=10 FOR UPDATE NOWAIT;COMMIT;

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 夏天车内温度高怎么办 反复长粉刺痘痘怎么办 砂锅烫到手很痛怎么办 低压高怎么办吃什么好 熬夜多了掉头发怎么办 复蚕丝被洗过了怎么办 买了梅邦虫草精怎么办 医院不开转院证怎么办 棕垫一直有味道怎么办 棕子床垫味道大怎么办 羊绒大衣洗坏了怎么办 无痕内裤开胶了怎么办 衬衫洗了会缩水怎么办 脾虚引起的眼袋怎么办 沙漠玫瑰根烂了怎么办 多肉种子不发芽怎么办 多肉植物掉叶子怎么办 白色衣服染了蓝色怎么办 白色的衣服染色了怎么办 白毛衣染上金纺怎么办 白色的衣服变黄怎么办 白衣服84漂黄了怎么办 真丝的衣服皱了怎么办 衣服领子洗大了怎么办 真丝围巾洗皱了怎么办 真丝裙子洗花了怎么办 衣服晒得掉色了怎么办 衣服上出现霉点怎么办 校服后面的霉点怎么办 被子潮了有味道怎么办 涨奶堵塞有硬块怎么办 军训裤子腰大了怎么办 猫总是在床上尿怎么办 被子盖厚了上火怎么办 猫在被子上撒尿怎么办 脸上被辣椒辣了怎么办 压缩袋衣服皱了怎么办 新买的枕头太高怎么办 刚买的枕头太高怎么办 喝了过期的中药怎么办 喝了坏了的中药怎么办