我正在尝试在应用程序运行和忙碌时将可为空的列添加到Oracle 10 OLTP数据库中常用的表中。添加可空列只是数据字典更改,因此任何表锁只能保持很短的时间(可以由系统处理)。
问题是我的ALTER TABLE
经常因此而失败:
ORA-00054: resource busy and acquire with NOWAIT specified
我目前的做法是通过运行来改变输入,直到桌面上没有锁定为止。这意味着我无法在SQL * Plus中完整地运行这样的脚本,但需要复制并粘贴每个语句并确保它有效。
有更好的方法吗?
答案 0 :(得分: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;