数据库中各种带锁游标加锁的时机分析
发表于:2025-11-13 作者:千家信息网编辑
千家信息网最后更新 2025年11月13日,这篇文章主要讲解了"数据库中各种带锁游标加锁的时机分析",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"数据库中各种带锁游标加锁的时机分析"吧!我建立了一
千家信息网最后更新 2025年11月13日数据库中各种带锁游标加锁的时机分析
这篇文章主要讲解了"数据库中各种带锁游标加锁的时机分析",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"数据库中各种带锁游标加锁的时机分析"吧!
我建立了一个表并生成一行数据:
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安全错误
数据库的锁怎样保障安全
网络安全攻防读后感
网络技术服务技术指导
视频直播 阿里云服务器
网络安全大数据的主要内容
怎么筛选对应两组数据库
电脑服务器机柜功率是多少
电脑服务器和笔记本有什么关系
网络安全专业能在之江实验室
数据库专家职级晋升评审
阿里云服务器 防爬虫
学籍管理系统数据库课设
数据库怎么建立表关系
电话通了之后无法连接服务器
三级网络技术蒙题
禁毒网络安全宣传周活动
58软件开发靠谱么
ic设计和软件开发哪个难
软件开发后期发展方向
网吧网络技术管理员招聘
飞卢小说为什么连不上服务器
智慧云平台投标客户端服务器地址
数据库就业前景好吗
国内网络安全竞赛哪个最好
群发会破坏腾讯服务器吗
高校网站服务器搭建与设计
信用卡逾期上报数据库是什么意思
nas和小型服务器区别
数据库怎么建立表关系
打游戏跑错服务器了
湾区网络安全盛会