在 oracle 11g 中允许设置会话和系统参数,称为ddl_lock_timeout
. 当您需要执行一些语句并且资源被高度使用时(为了避免ORA-00054 异常),它非常有用。
但情况是10g中没有这样的参数。
当然,我可以使用这样的结构:
DECLARE START_DATE DATE := SYSDATE;
BEGIN
LOOP
IF SYSDATE>START_DATE+30/60/60/24 THEN
EXIT;
END IF;
BEGIN
<some statement>
EXIT;
EXCEPTION WHEN OTHERS THEN
IF sqlcode != -54 THEN
RAISE;
END IF;
END;
END LOOP;
END;
通过使用它,我会尝试在一个循环中执行该语句 30 秒,但这里的问题是该语句被执行了很多次并且可能会导致一些麻烦(我不确定,但我感觉它不知何故),但是使用ddl_lock_timeout
该语句只执行一次,然后等待更蓬松的资源。
有任何想法吗?