Пятничная задачка

_Nikotin
Дата: 27.03.2011 01:56:11
Как всегда, баянная задачка.
Что вернёт последний select ?

drop table t1;

create table t1 as select 1 id, 0 val from dual;

create or replace function ft1 return number is
  pragma autonomous_transaction;
begin
  update t1 set val = val + 1;
  commit; 
  return 1;
end;
/

begin
  update t1 set val = 0 where ft1 = 1 and val is not null;
exception
  when others then 
    null;
end;
/

select * from t1;
LeGu
Дата: 27.03.2011 06:20:45
_Nikotin,

Мини-откаты?

+
SQL> update t1 set val = 0 where ft1 = 1 and val is not null;
update t1 set val = 0 where ft1 = 1 and val is not null
       *
ERROR at line 1:
ORA-00600: internal error code, arguments: [13013], [5001], [44916],
[46149492], [0], [46149492], [17], []


SQL> select * from t1;

        ID        VAL
---------- ----------
         1       5002
andreymx
Дата: 27.03.2011 10:23:19
_Nikotin
Что вернёт последний select ?
ничего хорошего
andreymx
Дата: 27.03.2011 10:41:49
+
NAMEVALUE
user commits5002
messages sent4891
free buffer requested5117
commit cleanouts5025
commit cleanouts successfully completed5025
switch current to new buffer5009
redo entries5102
IMU commits5002
execute count5088
10XE
dbms_photoshop
Дата: 27.03.2011 21:54:16
_Nikotin,
По-моему подобное лучше размещать в формате описания что об этом думаешь ты. Плюс вопрос, что об этом думают другие.
Elic
Дата: 28.03.2011 08:26:01
dbms_photoshop
По-моему подобное лучше размещать в формате описания что об этом думаешь ты. Плюс вопрос, что об этом думают другие.
+1
Ни разу это не задача. И термин "пятничная" дискредитирует.
тормозилло
Дата: 28.03.2011 08:35:37
а мне понравилосъ
_Nikotin
Дата: 28.03.2011 10:48:37
dbms_photoshop
По-моему подобное лучше размещать в формате описания что об этом думаешь ты. Плюс вопрос, что об этом думают другие.

Да думать-то особо нечего, всё уже описано давно
Сергей Маркеленков, Алгоритм “мини-откатов” в Oracle или еще раз о Write Consistency
... Цикл п.6-п.7 продолжается до тех пор, пока все строки, удовлетворяющие предикату команды на каждый раз новый момент времени SCNx, не будут успешно заблокированы, либо пока число таких попыток не превысит значение 500036). Если все строки успешно заблокированы, переходим к п.9. Иначе, если число таких попыток превысило 5000, переходим к п.8.
8) После 5000 безуспешных попыток блокировки в случае выполнения команды UPDATE производится ее откат и выдается сообщение об ошибке ORA-00600 [13013] [5001] … Описание аргументов можно посмотреть в [8].

...

8. Metalink Note 28185.1 “ORA-600 [13013] Unable to get a Stable set of Records”

36) Насколько я выяснил, это значение не менялось, по крайней мере, с версии Oracle 7.1