Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Compound SQL / 9 сообщений из 9, страница 1 из 1
28.05.2008, 14:18
    #35340235
ananas2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Compound SQL
Добрый день!

Можно ли в динамическом Compound SQL отключить откат транзакций всего блока в случае ошибки в строке блока(типа not atomic)и как?










Извиняюсь за дурацкий вопрос, заранее пасиба :)
...
Рейтинг: 0 / 0
28.05.2008, 14:23
    #35340253
ananas2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Compound SQL
Да, DB2 v8.2.
...
Рейтинг: 0 / 0
28.05.2008, 16:29
    #35340732
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Compound SQL
Один компаунд - одна транзакция.
Компаунд - это составной оператор по русски говоря.
На до он и составной АТОМАРНЫЙ (неделимый).
Именно поэтому триггеры тоже АТОМАРНЫЕ.
И внутри них не разрешены многие операции. SAVEPOINT, ROLLBACK, COMMIT и т.д.
...
Рейтинг: 0 / 0
28.05.2008, 17:03
    #35340879
ananas2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Compound SQL
Пасиба, за развернутый ответ:). Просто надо было окончательна удостоверится...
...
Рейтинг: 0 / 0
30.05.2008, 14:47
    #35345922
ananas2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Compound SQL
Еще вопросик:

select 'INSERT' as MODE,
current timestamp as current_ts,
char(current user,20) as current_user,
final.*
from final table ( insert into AUDIT.TEST (TEST_ID) values (100) ) final;

Эта форма выводит мне подробную инфу о вставленных данных в лог.
Мне нужен подобный вывод из блока Compound SQL...

Вариант:
declare global temporary table TEST1 AS
(select 'INSERT' as MODE,
current timestamp as current_ts,
char(current user,20) as current_user,
t.* from audit.test t) on commit preserve rows@

Не канает из-за того что declare невозможен после SET...

Подскажите чего-нить, плз, уже голову сломал...

Заранее пасиба!
...
Рейтинг: 0 / 0
30.05.2008, 22:21
    #35346791
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Compound SQL
А что, до SET никак? По синтаксису надо писать
declare global temporary table TEST1 AS (...) DEFINITION ONLY ...
что намекает на факт, что данные вставляются не здесь, а где-то после, в другом операторе.

В 8.2, как я помню, появилась возможность CALL из динамических Compound, а внутри SP свободы побольше.
...
Рейтинг: 0 / 0
02.06.2008, 13:15
    #35348831
ananas2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Compound SQL
Victor MetelitsaА что, до SET никак? По синтаксису надо писать
declare global temporary table TEST1 AS (...) DEFINITION ONLY ...
что намекает на факт, что данные вставляются не здесь, а где-то после, в другом операторе.

В 8.2, как я помню, появилась возможность CALL из динамических Compound, а внутри SP свободы побольше.
Ну если до SET, то я как понимаю получится так:

...
declare global temporary table TEST1 AS
(select 'INSERT' as MODE,
current timestamp as current_ts,
char(current user,20) as current_user,
t.* from audit.test t) definition only@
SET ...@
begin atomic
insert into AUDIT.TEST (TEST_ID) values (100);
insert into SESSION.TEST values ('INSERT', CURRENT TIMESTAMP, CHAR(CURRENT USER,20), 100);
...
И так после каждого инсерта, делета, апдейта...
Или попроще можно?

CALL? Процедуру вызывать? А подробнее не подскажете какой она, примерно, вид должна иметь?
...
Рейтинг: 0 / 0
03.06.2008, 12:07
    #35350882
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Compound SQL
Извините, я плохой специалист по SQL PL, а телепат совсем никудышный. Помню, когда-то читал о проблемах декларирования временных таблиц на comp.lang.databases.ibm-db2, и у меня сложилось впечатление, что временную таблицу достаточно продекларировать один раз на файл. Правда, там было странно: определили наверху файла пустую SP с декларацией временной таблицей, а в другой SP, ниже, ею пользовались.
...
Рейтинг: 0 / 0
03.06.2008, 15:35
    #35351602
ananas2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Compound SQL
Хм... Ладна, буду разбираться дальше. С декларированием временных таблиц до SET, проблем нет, а вот после никак, попробую с процедурами поиграться... Просто это:
declare global temporary table TEST1 AS
(select 'INSERT' as MODE,
current timestamp as current_ts,
char(current user,20) as current_user,
t.* from audit.test ( insert into AUDIT.TEST (TEST_ID) values (100) ) t) on commit preserve rows;
очень удобная форма для аудита изменений, легко можно зашить в какой-нить рэппер для апгрэйда уже написанных скриптов. Пасиба за помощь.

Раз уж про составной речь зашла, еще один вопрос:

Как выдергивать из блока warnings? Чтоб в лог писались warnings, которые происходили внутри блока...
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Compound SQL / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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