FIN PLACEKIND
Материал из GedeminWiki
/* Типы административно-территориальных единиц */ CREATE TABLE fin_placekind ( placekindkey dintkey, /* уникальный идентификатор */ grade SMALLINT, /* уровень, чем меньше, тем выше уровень */ name dname, /* наименование */ abbr dshorttext, /* сокрашение */ disabled dboolean, stand INTEGER, /* положение типа в месте в адресе */ security INTEGER, icon INTEGER, reserved INTEGER ); ALTER TABLE fin_placekind ADD CONSTRAINT fin_pk_placekind PRIMARY KEY (placekindkey); CREATE ASC INDEX fin_x_placekind_name ON fin_placekind (name); CREATE ASC INDEX fin_x_placekind_grade ON fin_placekind (grade); CREATE GENERATOR fin_g_placekindkey; SET GENERATOR fin_g_placekindkey TO 2000; SET TERM ^ ; CREATE TRIGGER fin_insert_placekind FOR fin_placekind BEFORE INSERT POSITION 0 AS BEGIN IF (NEW.placekindkey IS NULL) THEN NEW.placekindkey = GEN_ID(fin_g_placekindkey, 1); IF (NEW.grade IS NULL) THEN NEW.grade = 200; /* страна */ IF (NEW.disabled IS NULL) THEN NEW.disabled = 0; /* активен */ IF (NEW.stand IS NULL) THEN NEW.stand = 1; /* предшествует наименованию места */ END; ^ /* генерит код нового вида населенного пункта */ CREATE PROCEDURE cst_p_placekindkey RETURNS (PlaceKindKey INTEGER) AS BEGIN PlaceKindKey = GEN_ID(fin_g_placekindkey, 1); END; ^ /* список видов населенных пунктов по уровню */ CREATE PROCEDURE cst_p_placekindbygrade(Grade INTEGER) RETURNS (placekindkey INTEGER, name VARCHAR(60)) AS BEGIN FOR SELECT placekindkey, name FROM fin_placekind WHERE grade = :grade INTO :placekindkey, :name DO SUSPEND; END; ^ SET TERM ; ^