Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.11.28;
Скачать: [xml.tar.bz2];

Вниз

Помогите с синтаксисом СКЛ   Найти похожие ветки 

 
axx   (2004-11-02 14:40) [0]

есть тригер ACTIVE BEFORE UPDATE POSITION 0. Подскажите каким оператором отменить обновление.


 
stud ©   (2004-11-02 14:42) [1]

а может проще вообще запретить обновление таблицы?


 
DSKalugin ©   (2004-11-02 16:21) [2]

Вызвать в нем исключительную ситуацию. Вот мой пример:

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


 
Sergey_Masloff   (2004-11-02 17:24) [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


 
Sergey_Masloff   (2004-11-02 17:35) [4]

кстати автор Максим Доценко (Maxim Docenko) maxdoc@mail.ru


 
Deniz ©   (2004-11-03 07:05) [5]

> Sergey_Masloff   (02.11.04 17:24) [3]
>... Так тоже нельзя потому что %?;?*:%)");

А это что за регулярное выражение? ;-)



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.11.28;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.032 c
3-1099366698
saliev
2004-11-02 06:38
2004.11.28
Кодировка кириллицы не распознаётся в Delphi и Access


4-1098095790
Basket
2004-10-18 14:36
2004.11.28
Не все отображаются процессы под Windows XP SP2


1-1100263948
Sandman25
2004-11-12 15:52
2004.11.28
Blob и Variant


8-1093413641
Александр1
2004-08-25 10:00
2004.11.28
Заполнение фона


6-1095362341
Лев Ландау
2004-09-16 23:19
2004.11.28
Как зателнетить асю?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский