![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите с синтаксисом СКЛ [D6, FB]
axx © (2004-11-02 14:40:00)есть тригер ACTIVE BEFORE UPDATE POSITION 0. Подскажите каким оператором отменить обновление.
Deniz (2004-11-03 07:05:00) [1]> Sergey_Masloff (02.11.04 17:24) [3]
>... Так тоже нельзя потому что %?;?*:%)');
А это что за регулярное выражение? ;-)
Sergey_Masloff (2004-11-02 17:35:00) [2]кстати автор Максим Доценко (Maxim Docenko) maxdoc@mail.ru
Sergey_Masloff (2004-11-02 17:24:00) [3]DSKalugin © (02.11.04 16:21) [2]
Лучше так:
CREATE EXCEPTION ERR 'Unknown Error';
CREATE PROCEDURE ERROR (
E VARCHAR(2000))
AS
DECLARE VARIABLE EE VARCHAR(78);
BEGIN
/*-----------------------------------------------------------------------------+
| Процедура
| ERROR
| Входные параметры
| Текст сообщения об ошибке
| Выходные параметры - нет
|
| Назначение
| Динамическое формирование текста EXCEPTION.
| Примечание
| 78 это максимальная длинна сообщения в EXCEPTION в IntegBase
| Автор
| Неизвестен. Давно использую но написал не я. Сергей Маслов
+-----------------------------------------------------------------------------*/
EE='';
EE=:E;
/*если входной параметр больше чем 78 то тут возникает ошибка
которая успешно обрабатывается ниже*/
UPDATE rdb$exceptions
SET rdb$message=:E
WHERE rdb$exception_name='ERR';
EXCEPTION ERR;
/*сюда попадаем только если входной параметр Е больше 78 символов*/
/*EE - содержит 78 символов в обрезанных от E*/
when any do
begin
UPDATE rdb$exceptions
SET rdb$message=:EE
WHERE rdb$exception_name='ERR';
EXCEPTION ERR;
end
END
использовать так
CREATE TRIGGER SOMETABLE_BSOME FOR SOMETABLE
ACTIVE BEFORE DELETE POSITION 0
AS
begin
if SOMETABLE.SOMEFIELD in (1,2,8)) then
EXECUTE PROCEDURE ERROR('Нельзя');
else if SOMECONDITION then
EXECUTE PROCEDURE ERROR('Так тоже нельзя потому что %?;?*:%)');
end
DSKalugin (2004-11-02 16:21:00) [4]Вызвать в нем исключительную ситуацию. Вот мой пример:
CREATE EXCEPTION "exc_DelSelf" 'Запрещено удалять наши фирмы';
CREATE TRIGGER "FirmsAttributes_BD0" FOR "FirmsAttributes"
ACTIVE BEFORE DELETE POSITION 0
AS
begin
if ("FirmsAttributes"."f_ID" in (1,2,8))
then exception "exc_DelSelf";
end
stud (2004-11-02 14:42:00) [5]а может проще вообще запретить обновление таблицы?