GD PLACE
Материал из GedeminWiki
Версия от 14:37, 28 февраля 2007; SYSDBA (обсуждение | вклад)
gd_place
| Имя поля | Тип данных | Описание |
|---|---|---|
| id | dintkey | Первичный ключ. |
| parent | dforeignkey | Внешняя ссылка на родителя. |
| lb | dlb | Левая граница интервала. |
| rb | drb | Правая граница интервала. |
| name | dname | Наименование административно-территориальной единицы. |
| placetype | dplacetype | РУИД настройки, от которой зависит данный тест. Если такая настройка на базе не установлена, то тест выполняться не будет. |
| telprefix | dtext8 | Внешняя ссылка на скрипт-функцию теста. |
| code | dtext8 |
Проверка уникальности имени
Два триггера гарантируют уникальность имени административно-территориальной единицы на одном уровне.
CREATE EXCEPTION gd_e_placeexists 'Place already exists';
SET TERM ^ ;
CREATE TRIGGER gd_bi_place FOR gd_place
BEFORE INSERT
POSITION 0
AS
BEGIN
IF (NEW.ID IS NULL) THEN
NEW.ID = GEN_ID(gd_g_unique, 1) + GEN_ID(gd_g_offset, 0);
IF (EXISTS(SELECT * FROM gd_place WHERE COALESCE(parent, 0) = COALESCE(NEW.parent, 0)
AND UPPER(name) = UPPER(NEW.name))) THEN
BEGIN
EXCEPTION gd_e_placeexists;
END
END
^
CREATE TRIGGER gd_bu_place FOR gd_place
BEFORE UPDATE
POSITION 0
AS
BEGIN
IF (EXISTS(SELECT * FROM gd_place WHERE COALESCE(parent, 0) = COALESCE(NEW.parent, 0)
AND UPPER(name) = UPPER(NEW.name)
AND ID <> NEW.id)) THEN
BEGIN
EXCEPTION gd_e_placeexists;
END
END
^
SET TERM ; ^