数据库中各种带锁游标加锁的时机分析
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要讲解了"数据库中各种带锁游标加锁的时机分析",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"数据库中各种带锁游标加锁的时机分析"吧!我建立了一
千家信息网最后更新 2026年11月02日数据库中各种带锁游标加锁的时机分析
这篇文章主要讲解了"数据库中各种带锁游标加锁的时机分析",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"数据库中各种带锁游标加锁的时机分析"吧!
我建立了一个表并生成一行数据:
create table plch_one_row (id number);insert into plch_one_row values (1);commit;
然后我建立一个过程来检查我的表里这行数据是否被锁住。我用的方法是在一个带有自治事务的过程里试图对这行进行加锁。
CREATE OR REPLACE PROCEDURE plch_check_lockAS PRAGMA AUTONOMOUS_TRANSACTION; resource_busy EXCEPTION; PRAGMA EXCEPTION_INIT (resource_busy, -54); l_id plch_one_row.id%TYPE;BEGIN SELECT id INTO l_id FROM plch_one_row FOR UPDATE NOWAIT; DBMS_OUTPUT.put_line ('Not locked'); COMMIT;EXCEPTION WHEN resource_busy THEN DBMS_OUTPUT.put_line ('Locked');END;/下列的选项中,哪些可以用来代替下面这个块中的/* code */注释,从而执行之后会显示"Not locked"? 你可以假定在执行之前表上没有锁。
BEGIN /* code */ plch_check_lock;END;/
(A)
begin for rec in (select 1/0 from plch_one_row for update) loop null; end loop;exception when zero_divide then null;end;
SQL> BEGIN 2 begin 3 for rec in (select 1 / 0 from plch_one_row for update) loop 4 null; 5 end loop; 6 exception 7 when zero_divide then 8 null; 9 end; 10 plch_check_lock; 11 END; 12 /Not lockedPL/SQL procedure successfully completedSQL>
(B)
declare cursor cur is select 1/0 from plch_one_row for update;begin for rec in cur loop null; end loop;exception when zero_divide then null;end;
SQL> BEGIN 2 declare 3 cursor cur is 4 select 1 / 0 from plch_one_row for update; 5 begin 6 for rec in cur loop 7 null; 8 end loop; 9 exception 10 when zero_divide then 11 null; 12 end; 13 plch_check_lock; 14 END; 15 /LockedPL/SQL procedure successfully completedSQL>
(C)
declare cursor cur is select 1/0 from plch_one_row for update;begin savepoint before_loop; for rec in cur loop null; end loop;exception when zero_divide then rollback to before_loop;end;
SQL> BEGIN 2 declare 3 cursor cur is 4 select 1 / 0 from plch_one_row for update; 5 begin 6 savepoint before_loop; 7 for rec in cur loop 8 null; 9 end loop; 10 exception 11 when zero_divide then 12 rollback to before_loop; 13 end; 14 plch_check_lock; 15 END; 16 /Not lockedPL/SQL procedure successfully completedSQL>
(D)
begin savepoint before_loop; for rec in (select 1/0 from plch_one_row for update) loop null; end loop;exception when zero_divide then rollback to before_loop;end;
SQL> BEGIN 2 begin 3 savepoint before_loop; 4 for rec in (select 1 / 0 from plch_one_row for update) loop 5 null; 6 end loop; 7 exception 8 when zero_divide then 9 rollback to before_loop; 10 end; 11 plch_check_lock; 12 END; 13 /Not lockedPL/SQL procedure successfully completedSQL>
答案ACD
(A)正确:如果用隐性游标循环,发生异常时锁会被释放
(B)不正确,如果用显性游标循环,发生异常时锁不会被释放
(C)正确:异常被捕获,显式回滚到SAVE POINT, 因而锁被释放。
(D)正确:同A, 异常处理里的回滚相当于什么也没做。
感谢各位的阅读,以上就是"数据库中各种带锁游标加锁的时机分析"的内容了,经过本文的学习后,相信大家对数据库中各种带锁游标加锁的时机分析这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
数据
游标
数据库
时机
分析
学习
内容
过程
循环
一行
事务
就是
思路
情况
文章
方法
是在
更多
注释
知识
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技图片
广州紫鲸互联网科技有限公司
中关村互联网科技集团
科技和互联网公司
科技互联网公司装修
互联网科技的
科技制造互联网公司
极限挑战互联网科技
科技互联网公司logo
互联网 新科技
互联网科技素材视频竖屏
广州恒生互联网科技有限
华夏互联网科技业
工业互联网山东科技大学
山东有哪些互联网科技公司
南通创西澳互联网科技有限公司
智帮互联网科技公司最近动向
广州百诚互联网科技有限公司官网
35岁以上互联网科技行业
盐城市攀科互联网科技有限公司
互联网加科技
互联网科技公司华为
互联网电商科技
互联网科技网站
长亮科技 互联网金融
厦门比较好的科技互联网公司
互联网公司高科技产品
卡尔迅互联网科技有限公司
九思连强互联网电子科技有限公司
广州三三互联网科技有限公司