|
Нужен тригер
|
|||
---|---|---|---|
#18+
есть база menu в ней 3 поля (строим дерево) 1 nmbr (сериал - правда карявый какой-то) 2 parent(указатель на родителя)(def=0) 3 child(кол детей) (def=0) задача написать два triggera - первый на добовление в базу данных второй на удаленее т.е. если добавляем в базу запись с parent=n ишем запись с nmbr=n и child=child+1 аналогично на удаление(только нужно убивать все записи ниже удаляемой ветки) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2003, 15:18 |
|
Нужен тригер
|
|||
---|---|---|---|
#18+
А может можно сюда вставить структуру таблиц к которым тригеры будут привязаны, ну или хотя бы наобум что-то близкое. абстрактное мышление 0% :) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2003, 20:58 |
|
Нужен тригер
|
|||
---|---|---|---|
#18+
-- САМА ТАБЛИЦА CREATE TABLE "public"."products" ( "id" INTEGER DEFAULT nextval('"products_productid_seq"'::text) NOT NULL, "productname" VARCHAR(100) NOT NULL, "productmakerid" BIGINT, "abbr" VARCHAR(100), "lifetime" BIGINT, "havelifetime" SMALLINT DEFAULT 1 NOT NULL, "productimage" CHAR(254), "parentid" INTEGER DEFAULT 0 NOT NULL, "isnode" SMALLINT DEFAULT 0 NOT NULL, "childcount" INTEGER DEFAULT 0 NOT NULL, "isactive" BIGINT DEFAULT 1 NOT NULL, PRIMARY KEY("id") ) WITH OIDS; CREATE TRIGGER "products_after_delete" AFTER DELETE ON "public"."products" FOR EACH ROW EXECUTE PROCEDURE "public"."trg_products_after_delete"(); CREATE TRIGGER "products_after_insert" AFTER INSERT ON "public"."products" FOR EACH ROW EXECUTE PROCEDURE "public"."trg_products_after_insert"(); CREATE TRIGGER "products_after_update" AFTER UPDATE ON "public"."products" FOR EACH ROW EXECUTE PROCEDURE "public"."trg_products_after_update"(); -- table END ;-)) -- Триггер на удаление CREATE FUNCTION "public"."trg_products_after_delete" () RETURNS trigger AS' BEGIN --if new.parentid <> null THEN UPDATE products set childcount = childcount-1 where id = old.parentid; --end if; return new; END; 'LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER; -- Триггер на добавление CREATE FUNCTION "public"."trg_products_after_insert" () RETURNS trigger AS' DECLARE i integer; BEGIN --if new.parentid <> null THEN UPDATE products set childcount = childcount+1 where id = new.parentid; --end if; return new; END; 'LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER; -- И на изменение -- Нужно проверять не изменился ли после апдейта родитель -- И ,соответственно , контролировать childcount BEGIN if new.parentid <> old.parentid THEN UPDATE products set childcount = childcount-1 where id = old.parentid; UPDATE products set childcount = childcount+1 where id = new.parentid; end if; return new; END; ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2003, 08:19 |
|
Нужен тригер
|
|||
---|---|---|---|
#18+
-- AFTER UPDATE CREATE FUNCTION "public"."trg_products_after_update" () RETURNS trigger AS' BEGIN if new.parentid <> old.parentid THEN UPDATE products set childcount = childcount-1 where id = old.parentid; UPDATE products set childcount = childcount+1 where id = new.parentid; end if; return new; END; 'LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER; -- isnode всё же полезен , если вдруг смутит наличие такого поля , и -- совершенно субъективное мнение : "boolean - недоотстой" ;-)) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2003, 08:24 |
|
|
start [/forum/topic.php?fid=53&fpage=367&tid=2008247]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
others: | 234ms |
total: | 360ms |
0 / 0 |