Главная страница
    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.46 MB
Время: 0.033 c
3-1099197241
ali_t
2004-10-31 07:34
2004.11.28
размер колонок в TDBGrid


14-1100163573
AlexG
2004-11-11 11:59
2004.11.28
В чем рассширяемость XML?


14-1100105032
Soft
2004-11-10 19:43
2004.11.28
Путинский режим = ставка Гитлера.


14-1100168494
iis_work
2004-11-11 13:21
2004.11.28
Нужны исходники


1-1100293566
Димон
2004-11-13 00:06
2004.11.28
Как с помощью TStream вести лог?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский