Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE и raiserror / 11 сообщений из 11, страница 1 из 1
19.07.2006, 15:18
    #33864255
MichaelTim
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE и raiserror
Вопрос такой.
Можно ли сделать так.
В процедуре обработка данных. В цикле.
Для какойто записи срабатывает триггер в базе. Получить сообщение raiserror (сообщение ошибки, которое было сгенерировано) и продолжить выполнение для последующих записей?
...
Рейтинг: 0 / 0
19.07.2006, 15:21
    #33864278
Сергей Васкецов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE и raiserror
Используйте
declare @message varchar(255)
select @message='сообщение'
print @message
...
Рейтинг: 0 / 0
19.07.2006, 15:52
    #33864395
MichaelTim
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE и raiserror
ЭЭ...
:)
Это все понятно. Вопрос же был в другом - как получить сообщение, которое выдал триггер? Это раз
И как после этого рэйзеррора продолжить работу дальше. Это два :)
...
Рейтинг: 0 / 0
19.07.2006, 16:09
    #33864479
Dmitry.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE и raiserror
1. получить текст
select description from master..sysmessages where error=...
но без подстановки параметров.
подругому нельзя.

2. если записи вставляются по одной - никаких проблем продолжить.
иначе никак.
...
Рейтинг: 0 / 0
19.07.2006, 16:26
    #33864565
MichaelTim
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE и raiserror
Вот примерно код - просто так накидал чтобы объяснить

create table dbo.test_table(pkey int not null,value varchar(10) null)

insert into dbo.test_table
values(1,'')
insert into dbo.test_table
values(2,'')
insert into dbo.test_table
values(3,'')

create trigger dbo.test_tablee_trg on dbo.test_table for update as begin
declare _cur cursor for select i.pkey from inserted i
declare @c_pkey int
open _cur
fetch _cur into @c_pkey
while (@@sqlstatus=0) begin
if @c_pkey=2 begin
rollback trigger with raiserror 20001 'My msg!'
return
end
fetch _cur into @c_pkey
end
close _cur
deallocate cursor _cur

end

create procedure dbo.test_proc
as
begin
declare _cur cursor for select i.pkey from dbo.test_table i
declare @c_pkey int,@msg varchar(10)
open _cur
fetch _cur into @c_pkey
while (@@sqlstatus=0) begin
update dbo.test_table set value =str(@c_pkey) where pkey=@c_pkey
select @msg=str(@c_pkey)
print @msg
fetch _cur into @c_pkey
end
close _cur
deallocate cursor _cur

end

exec dbo.test_proc
тут при вызове в принте получаем
1
2
3
Все нормально - то есть после ошибки продолжает выполнение, но! после выполнения процедуры пишет что она была выполнена с таким то рэйзеррором. От этого можно избавиться?

И получить сообщение raiserror 20001 'My msg!' - можно?
Очень бы хотелось

select * from dbo.test_table

Тут все корректно - проапдейтило только 1 и 3
...
Рейтинг: 0 / 0
19.07.2006, 16:29
    #33864578
MichaelTim
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE и raiserror
На красивость кода не претендую. Все время писал на АСА... Теперь вот пытаюсь понять как с АСЕ работать.. Язык как по мне намного беднее :( И жаль что нет ро-левел триггеров....

Если что не так пишу - тыкайте носом :) Буду только благодареен
...
Рейтинг: 0 / 0
19.07.2006, 16:32
    #33864592
MichaelTim
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE и raiserror
В master..sysmassages как я понял - хранятся системные ошибки. А для user-defined?
Да и хорошо былобы получить то сообщение, которое было сгенерировано.... С уже семи подставленными параметрами.
Неужели нельзя никак?
...
Рейтинг: 0 / 0
19.07.2006, 17:09
    #33864765
Dmitry.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE и raiserror
На клиенте можно. внутри базы - нет.
ЗЫ: sysusermessages для user-defined
...
Рейтинг: 0 / 0
19.07.2006, 17:31
    #33864872
MichaelTim
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE и raiserror
Ну тут по идее как раз внутри базы хотелось бы...
Потому как сообщение для рэйзеррора генерится в триггере и как раз оно интересует.
...
Рейтинг: 0 / 0
19.07.2006, 18:12
    #33865053
MichaelTim
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE и raiserror
А установить @@sqlstate или @@error можно?
Ну то есть - как поверить что была ошибка чтобы запомнить эту запись..
...
Рейтинг: 0 / 0
20.07.2006, 01:54
    #33865564
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE и raiserror
MichaelTimВопрос такой.
Можно ли сделать так.
В процедуре обработка данных. В цикле.
Для какойто записи срабатывает триггер в базе. Получить сообщение raiserror (сообщение ошибки, которое было сгенерировано) и продолжить выполнение для последующих записей?

Т.е. на сервере перехватить raiserror и продолжить далее ? Нет, так нельзя.
Это невозможно.
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE и raiserror / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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