我知道您可以设置用户profiles或设置查询的常规超时。
但我希望将超时设置为过程中的特定查询并捕获异常,例如:
begin
update tbl set col = v_val; --Unlimited time
delete from tbl where id = 20; --Unlimited time
begin
delete from tbl; -- I want this to have a limited time to perform
exception when (timeout???) then
--code;
end;
end;
这可能吗?是否有任何超时异常我可以抓住?每个块还是查询?没有找到关于这个主题的太多信息。
答案 0 :(得分:3)
不,你不能在pl / sql中设置超时。您可以使用宿主语言来嵌入sql和pl / sql。
答案 1 :(得分:0)
只是一个想法:您可以在 DBMS_JOB 中执行删除操作。 然后创建一个监视作业的过程,然后调用:
DBMS_JOB.BROKEN(JOBID,TRUE);
DBMS_JOB.remove(JOBID);
答案 2 :(得分:0)
你可以这样做:
select * from tbl for update wait 10; --This example will wait 10 seconds. Replace 10 with number of seconds to wait
然后,select将尝试锁定指定的行,但如果在n秒后它不成功,它将抛出“ORA-30006:资源忙;获取WAIT超时已到期”。如果达到锁定,则可以执行删除。
希望有所帮助。
答案 3 :(得分:0)
v_timer1 := dbms_utility.get_time();
WHILE TRUE
LOOP
v_timer2 := dbms_utility.get_time();
EXIT WHEN (ABS(v_timer1 - v_timer2)/100) > 60; -- cancel after 60 sec.
END LOOP;