Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / raiserror в триггере / 14 сообщений из 14, страница 1 из 1
01.03.2006, 12:40
    #33573343
Lerche
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
raiserror в триггере
Sybase ASA 9.
Всегда ли raiserror в триггере приводит к откату всего, что сделано в триггере и в операторе, который привел к срабатыванию триггера ? Хочется, чтобы сообщение об ошибке на клиента ушло, но выполнение запроса не прерывалось. Это возможно ?
...
Рейтинг: 0 / 0
01.03.2006, 13:17
    #33573535
Gosha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
raiserror в триггере
SET OPTION PUBLIC.CONTINUE_AFTER_RAISERROR = 'ON'
...
Рейтинг: 0 / 0
01.03.2006, 13:29
    #33573570
Lerche
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
raiserror в триггере
"Выполнение запроса не прерывалось"- я имел в виду, чтобы не происходил откат всех изменений, которые сделал триггер и то действие, которое этот триггер запустило.
...
Рейтинг: 0 / 0
01.03.2006, 14:46
    #33573941
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
raiserror в триггере
Писать под ODBC перехват MESSAGE TO CLIENT, воспользоваться saVCL и по любому отказаться от этой идеи в таком виде реализации ;)
...
Рейтинг: 0 / 0
01.03.2006, 15:16
    #33574135
Сергей Васкецов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
raiserror в триггере
LercheХочется, чтобы сообщение об ошибке на клиента ушло, но выполнение запроса не прерывалось. Это возможно ?
А ничего типа print в ASA разве нету?
...
Рейтинг: 0 / 0
01.03.2006, 15:27
    #33574200
iLLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
raiserror в триггере
Print нетУ, зато есть Insert into.
Заведите журнал(таблицу) процессинга и туда триггером пишите измышления вашей системы по поводу происходящего...)
RaiseError - носит не уведомительный характер, а критический с точки зрения СУБД для вашего клиентского ПО. Поэтому им уведомлять клиента неправильно. А писать всякие уведомлялки с использованием ОДБС - тоже верх безрассудства. СУБД по определению является пассивным элементом системы, а клиент - активным.
...
Рейтинг: 0 / 0
01.03.2006, 15:59
    #33574394
Lerche
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
raiserror в триггере
Всем спасибо.
...
Рейтинг: 0 / 0
01.03.2006, 17:56
    #33574896
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
raiserror в триггере
iLLerPrint нетУ
Вообще-то, print есть. Печатает любой текст в окно сервера.
Во вторых, есть команда message, почему использовать ее "верх безрассудства" не понимаю.
В третьих, действительно есть универсальный для всех типов серверов "insert into SomeMessageTable".

iLLerRaiseError - носит не уведомительный характер, а критический с точки зрения СУБД для вашего клиентского ПО. Поэтому им уведомлять клиента неправильно.Уведомлять о достижении промежуточного чекпоинта в процедуре - действительно неправильно. А вот о критических проблемах - самое правильное :)
...
Рейтинг: 0 / 0
02.03.2006, 10:28
    #33575915
Vovaka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
raiserror в триггере
Расскажу в чем идея была:

Есть некая клиентская оболочка, для внесения всяческих изменений в БД вызываются различные процедуры, какие внутри них апдейтятся таблицы, оболочка не знает. Есть в системе аудит операций, построенный на триггерах. Т.е. пользователь в клиентской оболочке напротив определенной таблицы (вернее даже полей таблиц) ставит галочку, при этом создается триггер, который начинает отслеживать все транзакции и сохранять их в журнал. Теперь появилась потребность при изменении определенных таблиц запрашивать причину изменения у пользователя оболочки. Что хотели сделать: в журнал операций добавляется поле "Причина", в настройках аудита добавляется еще одна галочка на каждую таблицу "Указывать причину". Клиентская оболочка не знает какие таблицы будут модифицироваться внутри процедуры и нужно ли по ним запрашивать причину изменения и заранее не может потребовать от пользователя ввести причину модификации данных. Думали, что триггер, в момент срабатывания посмотрит, нужна ли причина, если да, то он вставит запись в журнал операций, вызовет определенный raiseerror и в нем передаст клиентской оболочке ID вставленной записи в журнал операций. Оболочка обработает exception, увидит определенный номер, вызовет еще одно окошко, в котором попросит пользователя ввести причину и вызовет процедуру, которая проапдейтит журнал операций, вставив туда причину модификации.
...
Рейтинг: 0 / 0
02.03.2006, 11:43
    #33576259
Сергей Васкецов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
raiserror в триггере
VovakaДумали, что триггер, в момент срабатывания посмотрит, нужна ли причина, если да, то он вставит запись в журнал операций, вызовет определенный raiseerror и в нем передаст клиентской оболочке ID вставленной записи в журнал операций. Оболочка обработает exception, увидит определенный номер, вызовет еще одно окошко, в котором попросит пользователя ввести причину и вызовет процедуру, которая проапдейтит журнал операций, вставив туда причину модификации.
То есть, внутри транзакции ожидается ввод пользователем причины, и пока ее юзер не введет, транзакция не завершается? Тогда Вам в форум "Проектирование" надо, а не сюда :).
...
Рейтинг: 0 / 0
02.03.2006, 14:45
    #33577156
Vovaka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
raiserror в триггере
Сергей Васкецов
То есть, внутри транзакции ожидается ввод пользователем причины, и пока ее юзер не введет, транзакция не завершается? Тогда Вам в форум "Проектирование" надо, а не сюда :).


Нет, транзакция не должна откатываться, стоит опция "Продолжать после ошибки", но в ASA, если это произошло в триггере, все равно идет откат, в ASE и в MSSQL - работает
...
Рейтинг: 0 / 0
02.03.2006, 14:50
    #33577172
Vovaka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
raiserror в триггере
Идея в том, что просто нужно уведомить клиентскую оболочку о неком событии из триггера
...
Рейтинг: 0 / 0
02.03.2006, 15:21
    #33577314
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
raiserror в триггере
VovakaИдея в том, что просто нужно уведомить клиентскую оболочку о неком событии из триггера
Володь, а что тебе правда не понравилась идея с табличкой. Сделай глобальную времянку, с очистой по COMMIT, вызываешь с клиента сохранение данных, если нужны уведомления, триггера пишут в эту времянку, клиентское приложение при неудачном сохранении делает ROLLBACK, при удачном считывает табличку и делает COMMIT. Дальше по рекомендациям в табличке делает что нужно. По моему вполне компромиссный вариант, хотя я все равно против такой постановки именно самомо вопроса ;)
...
Рейтинг: 0 / 0
03.03.2006, 23:12
    #33581513
iLLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
raiserror в триггере
Есть предложение: раз модификация таблиц идет из хп, а не напрямую, то и
логировать в журнал можно/нужно из хп. И причину нужно передавать на вход хп
вместе с данными. Тогда это будет одна транзакция, тогда это будет
технологичней. И диалог с запросом на причину клиентское ПО должно
показывать до вызова хп. Если заранее неизвестно нужно ли показывать диалог
с предложением ввести причину, то предлагаю ввести промежуточный уровень,
выраженный к примеру, ввиде хп, которой на вход подаются теже данные, что и
на вход основной хп, а на выходе она сообщает необходимо спрашивать причину
или нет. Тогда вся цепочка действий будет состоять только из атомарных
вызовов хп и работа СУБД связана с работой клиента штатным технологией
"запрос-ответ".
"Пользователь ввел данные, нажал кнопку сохранить"->"клиент дернул процедуру
спросить_ли_причину(...)"->"сервер ответил спросить"->"клиент выкидывает
юзеру вопрос"->"юзер ковыряет в носу"->"юзер сходил покурил"->...->"юзер
указал причину"->"клиент дернул процедуру
проапдейтить_все_нафиг(...,причина_такая_то)"->"сервер выполняет
процедуру"->"процедура записала в журнал все необходимые отметки".

P.S.: Проектировать надо лучше.


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / raiserror в триггере / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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