RP REPORTGROUP

Материал из GedeminWiki
(Различия между версиями)
Перейти к: навигация, поиск
 
 
(не показана 1 промежуточная версия 1 участника)
Строка 1: Строка 1:
 
+
<syntaxhighlight lang="SQL">
CREATE TABLE rp_reportgroup
+
  CREATE TABLE rp_reportgroup
 
   (
 
   (
 
     id            dintkey,
 
     id            dintkey,
Строка 11: Строка 11:
 
     reserved      dinteger
 
     reserved      dinteger
 
   );
 
   );
 
+
 
   ALTER TABLE rp_reportgroup
 
   ALTER TABLE rp_reportgroup
 
     ADD CONSTRAINT rp_pk_reportgroup PRIMARY KEY (id);
 
     ADD CONSTRAINT rp_pk_reportgroup PRIMARY KEY (id);
 
+
 
   CREATE UNIQUE INDEX rp_x_reportgroup_ugn ON rp_reportgroup
 
   CREATE UNIQUE INDEX rp_x_reportgroup_ugn ON rp_reportgroup
 
     /*COMPUTED BY (UPPER(usergroupname));*/
 
     /*COMPUTED BY (UPPER(usergroupname));*/
 
     (usergroupname);
 
     (usergroupname);
 
+
 
   CREATE UNIQUE INDEX rp_x_reportgroup_lrn ON
 
   CREATE UNIQUE INDEX rp_x_reportgroup_lrn ON
 
     rp_reportgroup (name, parent);
 
     rp_reportgroup (name, parent);
 
+
 
   ALTER TABLE rp_reportgroup ADD CONSTRAINT rp_fk_reportgroup_parent
 
   ALTER TABLE rp_reportgroup ADD CONSTRAINT rp_fk_reportgroup_parent
 
     FOREIGN KEY (parent) REFERENCES rp_reportgroup(id)
 
     FOREIGN KEY (parent) REFERENCES rp_reportgroup(id)
 
     ON UPDATE CASCADE
 
     ON UPDATE CASCADE
 
     ON DELETE CASCADE;
 
     ON DELETE CASCADE;
 
+
 
   ALTER TABLE gd_documenttype ADD CONSTRAINT gd_fk_documenttype_rpgroupkey
 
   ALTER TABLE gd_documenttype ADD CONSTRAINT gd_fk_documenttype_rpgroupkey
 
     FOREIGN KEY (reportgroupkey) REFERENCES rp_reportgroup (id) ON UPDATE CASCADE;
 
     FOREIGN KEY (reportgroupkey) REFERENCES rp_reportgroup (id) ON UPDATE CASCADE;
 
+
</syntaxhighlight>
  COMMIT;
+
 
+
  SET TERM ^ ;
+
 
+
  CREATE TRIGGER rp_before_insert_reportgroup FOR rp_reportgroup
+
    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 (NEW.usergroupname IS NULL) THEN
+
      NEW.usergroupname = CAST(NEW.id AS varchar(60));
+
  END
+
  ^
+
 
+
  CREATE PROCEDURE rp_p_checkgrouptree (newparent INTEGER, id INTEGER)
+
  RETURNS (
+
      include INTEGER
+
  )
+
  AS
+
    DECLARE VARIABLE I INTEGER;
+
  begin
+
    IF (newparent = id) THEN
+
    BEGIN
+
      include = 1;
+
      EXIT;
+
    END ELSE
+
      include = 0;
+
    FOR SELECT id FROM rp_reportgroup WHERE parent = :id INTO :I do
+
    BEGIN
+
      IF (newparent = I) THEN
+
      BEGIN
+
        include = 1;
+
        EXIT;
+
      END ELSE
+
      BEGIN
+
        EXECUTE PROCEDURE rp_p_checkgrouptree(:newparent, :I) RETURNING_VALUES :include;
+
        if (include = 1) then
+
          EXIT;
+
      END
+
    END
+
  END
+
  ^
+
  SET TERM ; ^
+
  
 
[[Category:База данных]]
 
[[Category:База данных]]

Текущая версия на 15:00, 26 ноября 2013

  CREATE TABLE rp_reportgroup
  (
    id             dintkey,
    parent         dforeignkey,
    name           dname,
    description    dtext180,
    lb               dlb,
    rb               drb,
    usergroupname  dname DEFAULT '',
    reserved       dinteger
  );
 
  ALTER TABLE rp_reportgroup
    ADD CONSTRAINT rp_pk_reportgroup PRIMARY KEY (id);
 
  CREATE UNIQUE INDEX rp_x_reportgroup_ugn ON rp_reportgroup
    /*COMPUTED BY (UPPER(usergroupname));*/
    (usergroupname);
 
  CREATE UNIQUE INDEX rp_x_reportgroup_lrn ON
    rp_reportgroup (name, parent);
 
  ALTER TABLE rp_reportgroup ADD CONSTRAINT rp_fk_reportgroup_parent
    FOREIGN KEY (parent) REFERENCES rp_reportgroup(id)
    ON UPDATE CASCADE
    ON DELETE CASCADE;
 
  ALTER TABLE gd_documenttype ADD CONSTRAINT gd_fk_documenttype_rpgroupkey
    FOREIGN KEY (reportgroupkey) REFERENCES rp_reportgroup (id) ON UPDATE CASCADE;
Персональные инструменты
Пространства имён

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