因为想要在生产上修改一个表的结构,但当执行 alter语句的时候提示 00054 错误。
把正在访问该表的SQL抓出来,发现有4个DML语句以及近20个select 语句。
毫无疑问,当有DML语句执行时执行DDL肯定会造成 NOWAIT 等待,但是对于select是否
会造成该错误,本人不太确定。于是小小测试一下:
1、随便建一张 test01表
2、开一个会话执行一个死循环的查询
declare
v_id number;
begin
loop
select id into v_id from test01 where rownum <2;
exit when
1>2 ;
end loop;
end;
开启第二个会话执行DDl, alter table test01 add address4 varchar(30);
结果发现,表结构是可以被修改的。
所以普通的查询是不会造成nowait 的(当然select for update 除外)