迭代器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;