powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / SQL0746N
5 сообщений из 5, страница 1 из 1
SQL0746N
    #37756008
-746
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите кто знает, как решить проблему "чтения из мутирующей таблицы", как ее называют в инете (SQL0746N) ?
db2 luw 9.7.5 (64x).

Ниже приведен схематичный пример. Нужен вариант, при котором будет именно такая схема обращений к t_temp.
Варианты с
"begin" вместо "begin atomic", с выносом вызова "p_ins" до "begin" не подходят,
Это перенос функционала с oracle и больших изменений делать не желательно.
В исходном виде процедуры в pl\sql пакете, здесь для простоты на sql pl.

Установка параметра DB2_RESOLVE_CALL_CONFLICT=ALL (YES) не помогает.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
drop table t_work@
drop table t_temp@
drop table t_info@

create table t_work(id number(10), text varchar2(20))@
create table t_temp(id number(10), text varchar2(20))@
create table t_info(id number(10), text varchar2(20))@

create or replace procedure p_ins() 
specific p_ins
language sql
begin 
    insert into t_temp values (300, 'text300');
end@

create or replace procedure p_read()
specific p_read
language sql
begin
    insert into t_info (select id, text from t_temp);
end@

drop trigger t_work_trg_aft_upd@

create trigger t_work_trg_aft_upd
after update on t_work 
for each statement
begin atomic
  call p_read;
end@

begin atomic
    call p_ins;
---
-- много чего ---
---
    update t_work set text='text';
end@
...
Рейтинг: 0 / 0
SQL0746N
    #37756096
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-746,

либо
Код: sql
1.
2.
3.
4.
5.
6.
create procedure p_test()
begin atomic
    call p_ins;
...
    update t_work set text='text';
end@

либо
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
[
create function p_test() 
returns some_type
modifies sql data
]
begin
    call p_ins;
...
    update t_work set text='text';
end@

С чем связано такое требование - вызвать именно из begin atomic ... end@?
...
Рейтинг: 0 / 0
SQL0746N
    #37756137
-746
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В блоке begin-end несколько insert\update, которые могут меняться в зависимости от настроек клиентской системы.
Вставка\чтение t_temp будет всегда.
После чтения из t_temp выполняется проверка, по результатам которой
либо принимается весь пакет DML между begin - end, либо откат.
...
Рейтинг: 0 / 0
SQL0746N
    #37756592
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-746В блоке begin-end несколько insert\update, которые могут меняться в зависимости от настроек клиентской системы.
Вставка\чтение t_temp будет всегда.
После чтения из t_temp выполняется проверка, по результатам которой
либо принимается весь пакет DML между begin - end, либо откат.
savepoint usage
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
begin
  declare exit handler for sqlexception
  begin
    rollback to savepoint sp1;
  end;
 
  savepoint sp1 on rollback retain cursors;
  call p_ins;
  update t_work set text='text';
  if (...) then
    rollback to savepoint sp1;
  end if;
end@

...
Рейтинг: 0 / 0
SQL0746N
    #37756868
-746
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein, спасибо.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / SQL0746N
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]