3

我正在尝试在应用程序运行且繁忙时向 Oracle 10 OLTP 数据库中的常用表添加一个可为空的列。添加可为空的列只是数据字典的更改,因此任何表锁都只保留很短的时间(可以由系统处理)。

问题是我ALTER TABLE经常失败:

ORA-00054: resource busy and acquire with NOWAIT specified

我目前的方法是通过运行它来阻止更改,直到表上碰巧没有锁为止。这意味着我不能在 SQL*Plus 中完整地运行这样的脚本,而是需要复制和粘贴每个语句并确保它有效。

有没有更好的办法?

4

1 回答 1

2

蛮力方法怎么样?将其放入无限循环并在完成后退出。伪代码(尚未检查):

create or replace 
procedure execDDL(ddl in varchar2) is
   myexp EXCEPTION;
   pragma exception_init (myexp, -54);
begin

 loop
   begin
      execute immediate ddl;
      exit;
   exception
      when myexp then 
         null;
 end loop;
 end;
于 2011-02-10T07:12:53.280 回答