在触发器函数中运行DELETE查询

时间:2016-10-16 20:54:12

标签: postgresql triggers plpgsql

我试图在PL / pgSQL中的触发器函数中运行DELETEUPDATE查询。

CREATE OR REPLACE FUNCTION trg_delete_order_layer()
  RETURNS trigger AS
$BODY$
DECLARE index_ INTEGER;
DECLARE a RECORD;
BEGIN
    IF EXISTS (SELECT * FROM map_layers_order WHERE id_map = OLD.id_map)
    THEN index_ := position FROM map_layers_order WHERE id_map = OLD.id_map AND id_layer = OLD.id_layer AND layer_type = 'layer';
    ELSE index_ := 0;
    END IF;
    RAISE NOTICE 'max_index % % %', index_, OLD.id_map, OLD.id_layer;
    EXECUTE 'DELETE FROM map_layers_order WHERE id_map = $1 AND id_layer = $2 AND layer_type = $3' USING OLD.id_map, OLD.id_layer, 'layer';
    EXECUTE 'UPDATE map_layers_order SET position = position -1 WHERE id_map = $1 AND position > $2' USING OLD.id_map, index_;
    VALUES (OLD.id_map, OLD.id_layer, 'layer', index_);
    RETURN OLD;
END;
$BODY$
  LANGUAGE plpgsql;

我不知道为什么我在运行DELETE查询的行中收到此错误:

  

查询没有结果数据的目的地

为什么会发生此错误,我该如何解决? 显然,如果我使用EXECUTE...INTO,我会得到一个更合理的错误,说查询没有结果。

0 个答案:

没有答案