触发函数代码中的“选择某些INTO变量”将创建一个名为变量的表

时间:2019-04-14 13:03:04

标签: sql postgresql plpgsql

我在数据库中发现了一个名为num的神秘表,该表有一个名为count的列。我不知道它是怎么到达那里的,然后我意识到这可能是由触发异常的行为引起的。

我有一个触发功能:

DECLARE num integer := 0;
BEGIN
  IF ... THEN
    SELECT COUNT(*) INTO num FROM ...
  END IF;
  IF num > 1 THEN
    DELETE FROM ...
  END IF;
  RETURN NEW;
END;

如您所见,我的目的是对查询返回的行进行计数,如果大于1则执行一些操作。

此错误代码可以对创建的有害表负责吗?如果是这样,该如何解决?

1 个答案:

答案 0 :(得分:0)

PL / pgSQL中的

SELECT ... INTO fooSELECT的结果存储在PL / pgSQL变量foo中。 SELECT ... INTO foo作为普通SQL语句运行,而创建表foo来存储结果。

这是造成混乱的原因,该表是在我针对DB手动测试触发器功能的SQL语句时创建的。