"D:\Replicator_1_beta\Client\TEMPLATE.GDB" Previous topic Chapter index Next topic

BD_DB_PROFILE

 

 

Descriptions

There is no desription for trigger BD_DB_PROFILE

 

Definition


CREATE TRIGGER BD_DB_PROFILE FOR DB_PROFILE ACTIVE
BEFORE DELETE POSITION 32767
AS
DECLARE VARIABLE REPL_COUNT INTEGER;
DECLARE VARIABLE COUNT_IS_CURR INTEGER;
DECLARE VARIABLE COUNT_REF INTEGER;
BEGIN
  /*Описание.
  Если не в режиме репликации:
      при попытке удаления ÷ужих БД(созданных другой БД),
      возбуждает исклю÷ение E_ACCESS_ERROR.
  Всегда устнавливает поколение изменения/удаления
      в соответствующей записи таблицы LOG_DB_PROFILE в NULL
     (поколение записи с÷итается неустановленным, поколение установит процедура SET_NEW_GEN);
     если есть под÷ин¸нные записи, возбуждает исклю÷ение E_DB_HAS_REFS;
     исклю÷ает запись об удаляемой БД из списка клиентов.
  */
  SELECT COUNT( DB_ID ) FROM CURR_SERV INTO :REPL_COUNT;
  /**/
  IF( REPL_COUNT = 0 )THEN/*NOT IN RECEIVE*/
    BEGIN
      IF( OLD.IS_CURR <> 1 )THEN EXCEPTION E_ACCESS_ERROR;/*Можно удалить только текущую БД*/
    END
  ELSE
    IF( REPL_COUNT <> 1 )THEN EXCEPTION EINTERNAL_MULTIPLE_REPL;/*ASSERT(DEBUG)*/
  /*===============SCEMA SPECIFIC===========*/
  /*Нельзя сделать вы÷ислимое поле DB_ID внешним клю÷¸м*/
  SELECT COUNT( DB_ID ) FROM MASTER WHERE DB_ID = OLD.DB_ID INTO :COUNT_REF;
  IF( COUNT_REF <> 0 )THEN EXCEPTION E_DB_HAS_REFS;/*Есть записи, принадлежащие удаляемой БД*/
  /*-----------------------------------------*/
  SELECT COUNT( DB_ID) FROM DETAIL WHERE DB_ID = OLD.DB_ID INTO :COUNT_REF;
  IF( COUNT_REF <> 0 )THEN EXCEPTION E_DB_HAS_REFS;/*Есть записи, принадлежащие удаляемой БД*/
  /*========================================*/

  /*В таблице регистрации пометить запись как удал¸нную
  (признак изменения (LOG_UPD_GEN) устанавливается в NULL, признак удал¸нности вы÷исляется)*/
  UPDATE LOG_DB_PROFILE
    SET   LOG_UPD_GEN = NULL
    WHERE
          LOG_DB_ID = OLD.DB_ID
      AND LOG_UPD_GEN IS NOT NULL;/*Доп. условие, ÷то бы избежать конфликта блокировок к SET_NEW_GEN*/
  /*-----------------------------------------*/
  DELETE FROM CLIENT WHERE DB_ID = OLD.DB_ID;/*Исклю÷ить из списка клиентов*/
END

    This file was generated with EMS InterBase/FireBird Manager (www.ibmanager.com) at 11/13/2006 10:51 PM Previous topic Chapter index Next topic

 

Хостинг от uCoz