Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Compound SQL
|
|||
|---|---|---|---|
|
#18+
Добрый день! Можно ли в динамическом Compound SQL отключить откат транзакций всего блока в случае ошибки в строке блока(типа not atomic)и как? Извиняюсь за дурацкий вопрос, заранее пасиба :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2008, 14:18 |
|
||
|
Compound SQL
|
|||
|---|---|---|---|
|
#18+
Один компаунд - одна транзакция. Компаунд - это составной оператор по русски говоря. На до он и составной АТОМАРНЫЙ (неделимый). Именно поэтому триггеры тоже АТОМАРНЫЕ. И внутри них не разрешены многие операции. SAVEPOINT, ROLLBACK, COMMIT и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2008, 16:29 |
|
||
|
Compound SQL
|
|||
|---|---|---|---|
|
#18+
Пасиба, за развернутый ответ:). Просто надо было окончательна удостоверится... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2008, 17:03 |
|
||
|
Compound SQL
|
|||
|---|---|---|---|
|
#18+
Еще вопросик: 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... Подскажите чего-нить, плз, уже голову сломал... Заранее пасиба! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2008, 14:47 |
|
||
|
Compound SQL
|
|||
|---|---|---|---|
|
#18+
А что, до SET никак? По синтаксису надо писать declare global temporary table TEST1 AS (...) DEFINITION ONLY ... что намекает на факт, что данные вставляются не здесь, а где-то после, в другом операторе. В 8.2, как я помню, появилась возможность CALL из динамических Compound, а внутри SP свободы побольше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2008, 22:21 |
|
||
|
Compound SQL
|
|||
|---|---|---|---|
|
#18+
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? Процедуру вызывать? А подробнее не подскажете какой она, примерно, вид должна иметь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2008, 13:15 |
|
||
|
Compound SQL
|
|||
|---|---|---|---|
|
#18+
Извините, я плохой специалист по SQL PL, а телепат совсем никудышный. Помню, когда-то читал о проблемах декларирования временных таблиц на comp.lang.databases.ibm-db2, и у меня сложилось впечатление, что временную таблицу достаточно продекларировать один раз на файл. Правда, там было странно: определили наверху файла пустую SP с декларацией временной таблицей, а в другой SP, ниже, ею пользовались. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2008, 12:07 |
|
||
|
Compound SQL
|
|||
|---|---|---|---|
|
#18+
Хм... Ладна, буду разбираться дальше. С декларированием временных таблиц до 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, которые происходили внутри блока... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2008, 15:35 |
|
||
|
|

start [/forum/topic.php?fid=43&msg=35346791&tid=1603853]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
51ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
| others: | 267ms |
| total: | 431ms |

| 0 / 0 |
