|
системные TC
|
|||
---|---|---|---|
#18+
Здравствуйте. есть необходимость использования системных ТС. Тут у меня похоже небольшой пробел ) на вьюхе в триггерах пишутся данные во временную таблицу последний триггер вызывает процедуру, которая проверяет есть ли в таблице записи. И если есть - вызывает исключение. Вот только после этого если временную прочитать в этой же транзакции, то там ничего нет. Подозреваю, что исключение отменило все вставки. http://www.ibase.ru/savepoints/ читал есть ли возможность в данном случае прочитать что находится во временной? Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2016, 23:51 |
|
системные TC
|
|||
---|---|---|---|
#18+
SwvВот только после этого если временную прочитать в этой же транзакции, то там ничего нет. Подозреваю, что исключение отменило все вставки.Таки и шо вас, собсно, не устраивает? Необработанное в WHEN исключение откатывает транзакцию и, соответственно, отменяет всё, что транзакция сделала "полезного". Если не устраивает такое поведение, пинайте автономные транзакции и временные таблицы с ON COMMIT PRESERVE ROWS. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2016, 02:52 |
|
системные TC
|
|||
---|---|---|---|
#18+
Hello, Rdb Dev! You wrote on 26 октября 2016 г. 10:59:49: Rdb Dev> Необработанное в WHEN исключение откатывает транзакцию и, соответственно, отменяет всё, что транзакция сделала "полезного".купи себе букварь. прежде чем других "учить". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2016, 11:00 |
|
системные TC
|
|||
---|---|---|---|
#18+
rdb_devисключение откатывает транзакцию Тут тебе не PG или MS какой... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2016, 11:27 |
|
системные TC
|
|||
---|---|---|---|
#18+
Мимопроходящийкупи себе букварь. прежде чем других "учить".Может тебе самому последовать своему совету, чтобы, наконец, прочесть то, что написано на стр.273 документа "Firebird Language Reference" ? "Исключение может быть обработано в операторе WHEN ... DO. Если пользовательское исключение не было обработано в триггере или в хранимой процедуре, то все выполненные действия отменяются , вызвавшая программа получает текст, заданный при создании исключения или альтернативный текст сообщения." ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2016, 13:25 |
|
системные TC
|
|||
---|---|---|---|
#18+
сейчас ещё и Денис получит пропистон за процитированную ХРЕНЬ Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2016, 13:28 |
|
системные TC
|
|||
---|---|---|---|
#18+
rdb_devто, что написано В каком месте написанного ты увидел слово "транзакция", чудик? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2016, 13:28 |
|
системные TC
|
|||
---|---|---|---|
#18+
rdb_dev, только там говорится о действиях, а не о транзакции. Транзакция вообще-то вовсе не обязательно состоит из одного запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2016, 13:31 |
|
системные TC
|
|||
---|---|---|---|
#18+
Это не Библия, состоит не из постулатов. Отрывок забавный! "Все выполненные действия" - чем выполненные? Процедурой/триггером, в котором случилось исключение? Всеми в рамках текущей транзакции или сэйвпоинта? Офисной уборщицей за всю предыдущую неделю? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2016, 13:32 |
|
системные TC
|
|||
---|---|---|---|
#18+
Симонов Денис, ну выразился не совсем корректно... Что уж прям так придираться? Транзакция не завершается, но все её действия откатываются, так же, как при rollback. Я прав? Разница лишь в том, что можно еще раз попытаться выполнить какие-либо действия в том же контексте транзакции. Но разве это вернет записи во временную таблицу, которые были вставлены в транзакции до EXCEPTION? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2016, 13:36 |
|
системные TC
|
|||
---|---|---|---|
#18+
Hello, Rdb Dev! You wrote on 26 октября 2016 г. 13:41:30: Rdb Dev> Я прав?нет. и хуже всего то, что весьма пафосный. Модератор: censored ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2016, 13:42 |
|
системные TC
|
|||
---|---|---|---|
#18+
rdb_dev, нет не прав. Клиент решает, что делать откатить транзакцию или откатится на последний сейвпойнт и продолжить действия в транзакции. WildSery, это не совсем корректный перевод Release Notes или LRU. Надо бы посмотреть что там в оригинале написано. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2016, 13:45 |
|
системные TC
|
|||
---|---|---|---|
#18+
Утро вечера мудреней ) Не получится так. ибо по документации получается,что откатывается либо все до начала транзакции. Либо в блоке begin when end. ON COMMIT PRESERVE ROWS судя по описанию тоже будет отменена в случае ошибки ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2016, 13:48 |
|
системные TC
|
|||
---|---|---|---|
#18+
Swv, ещё один. Ладно я подумаю как это предложение переписать так чтобы у кого-то мозги не затуманивались. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2016, 13:49 |
|
системные TC
|
|||
---|---|---|---|
#18+
rdb_devМимопроходящийкупи себе букварь. прежде чем других "учить".Может тебе самому последовать своему совету, чтобы, наконец, прочесть то, что написано на стр.273 документа "Firebird Language Reference" ? "Исключение может быть обработано в операторе WHEN ... DO. Если пользовательское исключение не было обработано в триггере или в хранимой процедуре, то все выполненные действия отменяются , вызвавшая программа получает текст, заданный при создании исключения или альтернативный текст сообщения." Здесь речь о действиях выполненных внутри хранимой процедуры или триггера. Поэтому правильно читать как-то так "Исключение может быть обработано в операторе WHEN ... DO. Если пользовательское исключение не было обработано в триггере или в хранимой процедуре, то все действия, выполненные внутри этой хранимой процедуры (триггера) отменяются, а вызвавшая программа получает текст, заданный при создании исключения или альтернативный текст сообщения." Если есть варианты получше предлагайте. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2016, 14:02 |
|
системные TC
|
|||
---|---|---|---|
#18+
Денис, слово "ВСЕ", с учётом сейвпоинтов (явных и неявных) тут наверное излишне. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2016, 14:08 |
|
системные TC
|
|||
---|---|---|---|
#18+
Симонов Денисrdb_devпропущено... Может тебе самому последовать своему совету, чтобы, наконец, прочесть то, что написано на стр.273 документа "Firebird Language Reference" ? "Исключение может быть обработано в операторе WHEN ... DO. Если пользовательское исключение не было обработано в триггере или в хранимой процедуре, то все выполненные действия отменяются , вызвавшая программа получает текст, заданный при создании исключения или альтернативный текст сообщения." Здесь речь о действиях выполненных внутри хранимой процедуры или триггера. Поэтому правильно читать как-то так "Исключение может быть обработано в операторе WHEN ... DO. Если пользовательское исключение не было обработано в триггере или в хранимой процедуре, то все действия, выполненные внутри этой хранимой процедуры (триггера) отменяются, а вызвавшая программа получает текст, заданный при создании исключения или альтернативный текст сообщения." Если есть варианты получше предлагайте. тут речь идет (если дословно) о абстрактной ХП. есть необходимость добавить в таблицу (временную) допустим в третьем BI триггере. И возбудить исключение 11 BI триггере. уведомить об этом приложение и чтобы добавленные данные в третьем BI остались во временной ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2016, 14:16 |
|
системные TC
|
|||
---|---|---|---|
#18+
Симонов Денис "Исключение может быть обработано в операторе WHEN ... DO. Если пользовательское исключение не было обработано в триггере или в хранимой процедуре, то все действия, выполненные внутри этой хранимой процедуры (триггера) отменяются, а вызвавшая программа получает текст, заданный при создании исключения или альтернативный текст сообщения." Забавно получается... Если исключение возбуждено в триггере, то откатятся изменения, сделанные в триггере и, если триггер был вызван по действиям, произведенным в хранимой процедуре, то исключение должно быть поднято до этой ХП. Если ХП также не обработает это исключение в WHEN...DO, то также должны быть отменены все изменения, сделанные в этой ХП? А если так, то должны быть отменены и все изменения, сделанные посредством выполнения последнего полученного пользовательского запроса в контексте данной транзакции? Иными словами, будут отменены все изменения последнего выданного в транзакции запроса? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2016, 14:28 |
|
системные TC
|
|||
---|---|---|---|
#18+
Swvесть необходимость добавить в таблицу (временную) допустим в третьем BI триггере. И возбудить исключение 11 BI триггере. уведомить об этом приложение и чтобы добавленные данные в третьем BI остались во временнойПопробуйте вставлять данные во временную таблицу ON COMMIT PRESERVE ROWS с помощью конструкции: IN AUTONOMOUS TRANSACTION DO INSERT INTO temp_tbl VALUES(....) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2016, 14:41 |
|
системные TC
|
|||
---|---|---|---|
#18+
Симонов Денис, про "до последнего фетча" не забудьте, однако. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2016, 14:42 |
|
системные TC
|
|||
---|---|---|---|
#18+
rdb_devSwvесть необходимость добавить в таблицу (временную) допустим в третьем BI триггере. И возбудить исключение 11 BI триггере. уведомить об этом приложение и чтобы добавленные данные в третьем BI остались во временнойПопробуйте вставлять данные во временную таблицу ON COMMIT PRESERVE ROWS с помощью конструкции: IN AUTONOMOUS TRANSACTION DO INSERT INTO temp_tbl VALUES(....) тогда не увижу в temp_tbl в последнем триггере записи. только если временная ON COMMIT PRESERVE ROWS и записи с тегом транзакции. получается записи будут висеть во временной до завершения коннекта. Сильно это будет напрягать сервер? или же в рамках коннекта временная работает так же как и обычная? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2016, 15:00 |
|
системные TC
|
|||
---|---|---|---|
#18+
pastor, почему именно "до последнего фетча"? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2016, 15:48 |
|
системные TC
|
|||
---|---|---|---|
#18+
Swvтогда не увижу в temp_tbl в последнем триггере записи. только если временная ON COMMIT PRESERVE ROWS и записи с тегом транзакции.Разве есть иной выбор? Swvполучается записи будут висеть во временной до завершения коннекта.Ну, поставьте на них гриф "С.С., после прочтения сжечь!" и пусть фетч из этой таблицы их подчистит обычным DELETE FROM. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2016, 15:53 |
|
системные TC
|
|||
---|---|---|---|
#18+
rdb_devРазве есть иной выбор? Выбор есть всегда. Наиболее очевидный в данном случае: перестать бредить и начать изучать предмет. Причём как для тебя, так и для ТСа. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2016, 15:57 |
|
|
start [/forum/topic.php?fid=40&fpage=53&tid=1561892]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
others: | 271ms |
total: | 415ms |
0 / 0 |