выполняю скрипт под обычным юзером:
SQL> create table mut(c number)
Table created.
SQL> insert into mut values (1)
1 row created.
SQL> create or replace function get_c return number
as
result number;
begin
select max(c)+1 into result from mut;
return result;
end;
Function created.
SQL> update mut set c=get_c
update mut set c=get_c
Error at line 17
ORA-04091: table TST.MUT is mutating, trigger/function may not see it
ORA-06512: at "TST.GET_C", line 5
Script Terminated on line 17.
получаю mutating. Теперь выполняю под SYS:
SQL> create table mut(c number)
Table created.
SQL> insert into mut values (1)
1 row created.
SQL> create or replace function get_c return number
as
result number;
begin
select max(c)+1 into result from mut;
return result;
end;
Function created.
SQL> update mut set c=get_c
1 row updated.
вопрос - почему ? SYS он особенный чтоли ? ему правила не писаны ? ))