GD PLACE

Материал из GedeminWiki
Перейти к: навигация, поиск

Иерархический справочник административно-территориальных единиц.

gd_place

Имя поля Тип данных Описание
id dintkey Первичный ключ.
parent dforeignkey Внешняя ссылка на вышележащий уровень. Например, область входит в страну, район в область, населенный пункт в район и т.д.
lb dlb Левая граница интервала.
rb drb Правая граница интервала.
name dname Наименование административно-территориальной единицы.
placetype dplacetype Тип административно-территориальной единицы. Строка. Например: Страна, Область, Район, Город и т.п.
telprefix dtext8 Телефонный код.
code dtext8 Числовой код административно-территориальной единицы.
editiondate deditiondate Дата и время последнего исправления.

Проверка уникальности имени

Два триггера гарантируют уникальность имени административно-территориальной единицы на одном уровне.


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 ; ^

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты