Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 RAISE_APPLICATION_ERROR и error during execution of trigger  [new]
Гость форума
Guest
Не судите строго, честно рылся по форуму но подходящего не нашёл.
Вопрос в следующем, написать обработчик проверяющий уже наличие вставляемой записи.
Упорно получаю такое сообщение:
(Error): ORA-20101: "Текст сообщения" ORA-06512: at "TR_TBL", line 10 ORA-04088: error during execution of trigger 'TR_TBL'
А хотелось бы просто получить "Текст сообщения". В чём причина появления строки line 10 ORA-04088: error during execution of trigger 'TR_TBL'

CREATE OR REPLACE TRIGGER TR_TBL
BEFORE
INSERT OR UPDATE
ON TBL
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
declare
id number;
begin
id:=1;
select count(*) into id from tbl where ID=:NEW.ID and FIELD=:NEW.FIELD and rownum=1;
FIELD=:NEW.FIELD);

if inserting or updating then
if id<>0 then
RAISE_APPLICATION_ERROR( -20101, 'Текст сообщения');
return;
end if;
end if;

end;
/
Пробовал даже удалить строку select count(*) into id from tbl where ID=:NEW.ID and FIELD=:NEW.FIELD and rownum=1;
т.е. убрать обработку и всеравно получаю туже ошибку.

Заранее спсибо за ответ.

И ещё подскажите что обозначет код -20101 для RAISE_APPLICATION_ERROR. Нашёл только что он может быть в диапозоне от -20000 до -20999.
28 май 09, 10:44    [7238056]     Ответить | Цитировать Сообщить модератору
 Re: RAISE_APPLICATION_ERROR и error during execution of trigger  [new]
Elic
Member

Откуда:
Сообщений: 29990
RTFM Concepts: UNIQUE Key Integrity Constraints (FAQ)
28 май 09, 10:46    [7238070]     Ответить | Цитировать Сообщить модератору
 Re: RAISE_APPLICATION_ERROR и error during execution of trigger  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8131
Гость форума
И ещё подскажите что обозначет код -20101 для RAISE_APPLICATION_ERROR. Нашёл только что он может быть в диапозоне от -20000 до -20999.
Это тот самый код, который вы же сами и задали:
RAISE_APPLICATION_ERROR( -20101, 'Текст сообщения');
28 май 09, 10:49    [7238089]     Ответить | Цитировать Сообщить модератору
 Re: RAISE_APPLICATION_ERROR и error during execution of trigger  [new]
Гость форума
Guest
SQL*Plus
Гость форума
И ещё подскажите что обозначет код -20101 для RAISE_APPLICATION_ERROR. Нашёл только что он может быть в диапозоне от -20000 до -20999.
Это тот самый код, который вы же сами и задали:
RAISE_APPLICATION_ERROR( -20101, 'Текст сообщения');


Да задал то я его задал, просто из примера взял, а что обозначает не знаю, поэтому и спрашиваю.
28 май 09, 10:53    [7238116]     Ответить | Цитировать Сообщить модератору
 Re: RAISE_APPLICATION_ERROR и error during execution of trigger  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8131
Гость форума
SQL*Plus
Гость форума
И ещё подскажите что обозначет код -20101 для RAISE_APPLICATION_ERROR. Нашёл только что он может быть в диапозоне от -20000 до -20999.
Это тот самый код, который вы же сами и задали:
RAISE_APPLICATION_ERROR( -20101, 'Текст сообщения');
Да задал то я его задал, просто из примера взял, а что обозначает не знаю, поэтому и спрашиваю.
Этот код означает ошибку "Текст сообщения".
Коды -20000 - -20999 зарезервированы для ошибок, задаваемых пользователем (программистом).
Чего напишете в RAISE_APPLICATION_ERROR, то этот код и означает.
28 май 09, 11:07    [7238190]     Ответить | Цитировать Сообщить модератору
 Re: RAISE_APPLICATION_ERROR и error during execution of trigger  [new]
Гость форума
Guest
SQL*Plus
Гость форума
SQL*Plus
Гость форума
И ещё подскажите что обозначет код -20101 для RAISE_APPLICATION_ERROR. Нашёл только что он может быть в диапозоне от -20000 до -20999.
Это тот самый код, который вы же сами и задали:
RAISE_APPLICATION_ERROR( -20101, 'Текст сообщения');
Да задал то я его задал, просто из примера взял, а что обозначает не знаю, поэтому и спрашиваю.
Этот код означает ошибку "Текст сообщения".
Коды -20000 - -20999 зарезервированы для ошибок, задаваемых пользователем (программистом).
Чего напишете в RAISE_APPLICATION_ERROR, то этот код и означает.

С этим понятно, спасибо.
Осталось только с ошибкой разобраться
28 май 09, 11:10    [7238207]     Ответить | Цитировать Сообщить модератору
 Re: RAISE_APPLICATION_ERROR и error during execution of trigger  [new]
hoarfrost
Member

Откуда: Волгоград
Сообщений: 438
А что делает вот эта строчка:
Гость форума

FIELD=:NEW.FIELD);

:)
28 май 09, 11:14    [7238234]     Ответить | Цитировать Сообщить модератору
 Re: RAISE_APPLICATION_ERROR и error during execution of trigger  [new]
Гость форума
Guest
hoarfrost
А что делает вот эта строчка:
Гость форума

FIELD=:NEW.FIELD);

:)

Копи-паст...не знаю откуда взялась. Не обращайте внимания, на суть вопроса эт оне влияет.
28 май 09, 11:24    [7238301]     Ответить | Цитировать Сообщить модератору
 Re: RAISE_APPLICATION_ERROR и error during execution of trigger  [new]
Гость форума
Guest
Elic
RTFM Concepts: UNIQUE Key Integrity Constraints (FAQ)

Может я чего то не понял, но на имеющиеся у меня поля уникальность не наложена, в индекс они не входят, по ключам ссылок на другие таблицы нет.
Или вы как раз и предлагаете наложить уникальность?
Тогда как выдать сообщение предупреждающее об ошибке.
Просто дело в том что процедура по которой происходит добавление/изменение записи не моя и править я её не могу, я могу только изменить что-то на уровне триггера.
28 май 09, 11:39    [7238409]     Ответить | Цитировать Сообщить модератору
 Re: RAISE_APPLICATION_ERROR и error during execution of trigger  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8131
Гость форума
...я чего то не понял...
Проверьте, как будет работать ваш триггер при
1. UPDATE tbl ...
2. INSERT INTO tbl ... SELECT ... FROM ...
28 май 09, 11:43    [7238435]     Ответить | Цитировать Сообщить модератору
 Re: RAISE_APPLICATION_ERROR и error during execution of trigger  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
Гость форума
Или вы как раз и предлагаете наложить уникальность?
Тогда как выдать сообщение предупреждающее об ошибке.
Именно так. А о сообщении об ошибке позаботится Оракл :) В многопользовательской системе Ваша проверка на уровне триггера (особенно если больше Вы ничего не можете менять) ничего не гарантирует.

ЗЫ: А то, что Вы изначально спрашиваете, - это стек ошибок и избавиться от него на уровне триггера Вы не сможете :)
28 май 09, 11:48    [7238476]     Ответить | Цитировать Сообщить модератору
 Re: RAISE_APPLICATION_ERROR и error during execution of trigger  [new]
Гость форума
Guest
Jannny
Гость форума
Или вы как раз и предлагаете наложить уникальность?
Тогда как выдать сообщение предупреждающее об ошибке.
Именно так. А о сообщении об ошибке позаботится Оракл :) В многопользовательской системе Ваша проверка на уровне триггера (особенно если больше Вы ничего не можете менять) ничего не гарантирует.

ЗЫ: А то, что Вы изначально спрашиваете, - это стек ошибок и избавиться от него на уровне триггера Вы не сможете :)

К сожалению я и структуру таблицы менять не могу.
Единственное что я могу отловить это данные, которые пытаются изменить/добавить в таблицу
28 май 09, 11:55    [7238527]     Ответить | Цитировать Сообщить модератору
 Re: RAISE_APPLICATION_ERROR и error during execution of trigger  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7794
Блог
Гость форума,

в таком случае триггер Вам всё равно не поможет. Можете попробовать превратить работу DML-операторами с этой табличкой в однопользовательскую. :)
28 май 09, 12:38    [7238885]     Ответить | Цитировать Сообщить модератору
 Re: RAISE_APPLICATION_ERROR и error during execution of trigger  [new]
Andrey.L
Member

Откуда: Харьков
Сообщений: 1546
Гость форума
Jannny
Гость форума
Или вы как раз и предлагаете наложить уникальность?
Тогда как выдать сообщение предупреждающее об ошибке.
Именно так. А о сообщении об ошибке позаботится Оракл :) В многопользовательской системе Ваша проверка на уровне триггера (особенно если больше Вы ничего не можете менять) ничего не гарантирует.

ЗЫ: А то, что Вы изначально спрашиваете, - это стек ошибок и избавиться от него на уровне триггера Вы не сможете :)

К сожалению я и структуру таблицы менять не могу.
Единственное что я могу отловить это данные, которые пытаются изменить/добавить в таблицу
Тебе никто не предлагает менять структуру таблицы.
Тебе предлается создать ограничение уникальности (UNIQUE) или первичный ключ (PRIMARY KEY) для решения задачи которую ты "нашкрябал" в триггере.
28 май 09, 12:44    [7238937]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить