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

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










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

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
Compound SQL
    #35346791
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что, до SET никак? По синтаксису надо писать
declare global temporary table TEST1 AS (...) DEFINITION ONLY ...
что намекает на факт, что данные вставляются не здесь, а где-то после, в другом операторе.

В 8.2, как я помню, появилась возможность CALL из динамических Compound, а внутри SP свободы побольше.
...
Рейтинг: 0 / 0
Compound SQL
    #35348831
ananas2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Compound SQL
    #35350882
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извините, я плохой специалист по SQL PL, а телепат совсем никудышный. Помню, когда-то читал о проблемах декларирования временных таблиц на comp.lang.databases.ibm-db2, и у меня сложилось впечатление, что временную таблицу достаточно продекларировать один раз на файл. Правда, там было странно: определили наверху файла пустую SP с декларацией временной таблицей, а в другой SP, ниже, ею пользовались.
...
Рейтинг: 0 / 0
Compound SQL
    #35351602
ananas2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хм... Ладна, буду разбираться дальше. С декларированием временных таблиц до 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
9 сообщений из 9, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Compound SQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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