日期:2014-05-17  浏览次数:20953 次

新人求教oracle如何判断语句执行超时
假设有个A表被锁住了。
我有语句是这样的:
DECLARE
   c INT;
BEGIN
   SELECT c_1 INTO c FROM A FOR UPDATE WAIT 10;
   IF SQLCODE <> 0 THEN
      dbms_output.put_line('超时啦!');
   END IF;
END;

我是想判断到是否超时,但是实际执行的时候是直接报错的,不会输出“超时”文本。
请问这个如何实现?
其实就是想处理并发时的一个返回。

------解决方案--------------------
出异常了,捕获异常。根据异常代码来处理

DECLARE
  c INT;
BEGIN
  SELECT c_1 INTO c FROM A FOR UPDATE WAIT 1;
EXCEPTION
  WHEN others THEN
    dbms_output.put_line(SUBSTR(SQLERRM, 1, 120));
    dbms_output.put_line(SQLCODE);
    dbms_output.put_line('超时啦!');
    --END IF;
END;

------解决方案--------------------

begin
insert into t1 values(...);
exception
   when others then
  ...
end;

begin
insert into t2 values(...);
exception
   when others then
  ...
end;