迭代器postgresql
Iterator postgreslql
我需要你的帮助。我尝试在 postgresql 中创建一个迭代器进程,但我做不到。我有这个:
-- Function: public.actualizar_luminarias()
-- DROP FUNCTION public.actualizar_luminarias();
CREATE OR REPLACE FUNCTION public.actualizar_luminarias()
RETURNS trigger AS
$BODY$
BEGIN
IF (TG_OP = 'DELETE') THEN
DELETE FROM "Luminarias" where id_pluz=OLD.id_pluz;
RETURN OLD;
ELSIF (TG_OP = 'UPDATE') THEN
UPDATE "Luminarias" set id_pluz=NEW.id_pluz, geom=NEW.geom, centromand=NEW.centromand where id_pluz=OLD.id_pluz;
RETURN NEW;
ELSIF (TG_OP = 'INSERT') THEN
IF (NEW.numluminar = 1) THEN
INSERT INTO "Luminarias"(id_pluz, geom, centromand) VALUES (NEW.id_pluz, NEW.geom, NEW.centromand);
RETURN NEW;
ELSIF (NEW.numluminar = 2) THEN
INSERT INTO "Luminarias"(id_pluz, geom, centromand) VALUES (NEW.id_pluz, NEW.geom, NEW.centromand);
INSERT INTO "Luminarias"(id_pluz, geom, centromand) VALUES (NEW.id_pluz, NEW.geom, NEW.centromand);
RETURN NEW;
ELSIF (NEW.numluminar = 3) THEN
INSERT INTO "Luminarias"(id_pluz, geom, centromand) VALUES (NEW.id_pluz, NEW.geom, NEW.centromand);
INSERT INTO "Luminarias"(id_pluz, geom, centromand) VALUES (NEW.id_pluz, NEW.geom, NEW.centromand);
INSERT INTO "Luminarias"(id_pluz, geom, centromand) VALUES (NEW.id_pluz, NEW.geom, NEW.centromand);
RETURN NEW;
ELSIF (NEW.numluminar > 3) THEN
INSERT INTO "Luminarias"(id_pluz, geom, centromand) VALUES (NEW.id_pluz, NEW.geom, NEW.centromand);
RETURN NEW;
END IF;
END IF;
RETURN NULL;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION public.actualizar_luminarias()
OWNER TO postgres;
COMMENT ON FUNCTION public.actualizar_luminarias() IS 'Actualiza las luminarias automaticamente cuando se modifica puntos de luz';
我尝试使用迭代器 FOR 或 WHILE 来实现此代码,如下所示:
...
ELSIF (TG_OP = 'INSERT') THEN
WHILE iterator <= NEW.numluminar
LOOP
INSERT INTO "Luminarias"(id_pluz, geom, centromand) VALUES (NEW.id_pluz, NEW.geom, NEW.centromand);
RETURN NEW;
iterator := iterator + 1;
END LOOP;
RETURN NULL;
END;
...
或者这样:
...
ELSIF (TG_OP = 'INSERT') THEN
FOR i in 1...NEW.lumnuminar
LOOP
INSERT INTO "Luminarias"(id_pluz, geom, centromand) VALUES (NEW.id_pluz, NEW.geom, NEW.centromand);
RETURN NEW;
END LOOP;
RETURN NULL;
END;
有人知道如何实现一个迭代器吗?
非常感谢您的帮助!
非常感谢 Jim Narby!
WHILE iterator <= NEW.numluminar
LOOP
INSERT INTO "Luminarias"(id_pluz, geom, centromand) VALUES (NEW.id_pluz, NEW.geom, NEW.centromand);
iterator := iterator + 1;
END LOOP;
RETURN NEW;
我需要你的帮助。我尝试在 postgresql 中创建一个迭代器进程,但我做不到。我有这个:
-- Function: public.actualizar_luminarias()
-- DROP FUNCTION public.actualizar_luminarias();
CREATE OR REPLACE FUNCTION public.actualizar_luminarias()
RETURNS trigger AS
$BODY$
BEGIN
IF (TG_OP = 'DELETE') THEN
DELETE FROM "Luminarias" where id_pluz=OLD.id_pluz;
RETURN OLD;
ELSIF (TG_OP = 'UPDATE') THEN
UPDATE "Luminarias" set id_pluz=NEW.id_pluz, geom=NEW.geom, centromand=NEW.centromand where id_pluz=OLD.id_pluz;
RETURN NEW;
ELSIF (TG_OP = 'INSERT') THEN
IF (NEW.numluminar = 1) THEN
INSERT INTO "Luminarias"(id_pluz, geom, centromand) VALUES (NEW.id_pluz, NEW.geom, NEW.centromand);
RETURN NEW;
ELSIF (NEW.numluminar = 2) THEN
INSERT INTO "Luminarias"(id_pluz, geom, centromand) VALUES (NEW.id_pluz, NEW.geom, NEW.centromand);
INSERT INTO "Luminarias"(id_pluz, geom, centromand) VALUES (NEW.id_pluz, NEW.geom, NEW.centromand);
RETURN NEW;
ELSIF (NEW.numluminar = 3) THEN
INSERT INTO "Luminarias"(id_pluz, geom, centromand) VALUES (NEW.id_pluz, NEW.geom, NEW.centromand);
INSERT INTO "Luminarias"(id_pluz, geom, centromand) VALUES (NEW.id_pluz, NEW.geom, NEW.centromand);
INSERT INTO "Luminarias"(id_pluz, geom, centromand) VALUES (NEW.id_pluz, NEW.geom, NEW.centromand);
RETURN NEW;
ELSIF (NEW.numluminar > 3) THEN
INSERT INTO "Luminarias"(id_pluz, geom, centromand) VALUES (NEW.id_pluz, NEW.geom, NEW.centromand);
RETURN NEW;
END IF;
END IF;
RETURN NULL;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION public.actualizar_luminarias()
OWNER TO postgres;
COMMENT ON FUNCTION public.actualizar_luminarias() IS 'Actualiza las luminarias automaticamente cuando se modifica puntos de luz';
我尝试使用迭代器 FOR 或 WHILE 来实现此代码,如下所示:
...
ELSIF (TG_OP = 'INSERT') THEN
WHILE iterator <= NEW.numluminar
LOOP
INSERT INTO "Luminarias"(id_pluz, geom, centromand) VALUES (NEW.id_pluz, NEW.geom, NEW.centromand);
RETURN NEW;
iterator := iterator + 1;
END LOOP;
RETURN NULL;
END;
...
或者这样:
...
ELSIF (TG_OP = 'INSERT') THEN
FOR i in 1...NEW.lumnuminar
LOOP
INSERT INTO "Luminarias"(id_pluz, geom, centromand) VALUES (NEW.id_pluz, NEW.geom, NEW.centromand);
RETURN NEW;
END LOOP;
RETURN NULL;
END;
有人知道如何实现一个迭代器吗? 非常感谢您的帮助!
非常感谢 Jim Narby!
WHILE iterator <= NEW.numluminar
LOOP
INSERT INTO "Luminarias"(id_pluz, geom, centromand) VALUES (NEW.id_pluz, NEW.geom, NEW.centromand);
iterator := iterator + 1;
END LOOP;
RETURN NEW;