Postgres PERFORM COUNT(*)总是返回0

时间:2016-07-30 11:36:24

标签: postgresql stored-procedures plpgsql

我在SQL中查询postgres以获取计数

SELECT COUNT(*) AS count_variable FROM user WHERE something=something;

当我执行时,它正在返回计数。然后根据要求,在Postgres函数中需要这个查询。当我在Function中使用这个查询时,Postgres回复了

  

错误:查询没有结果数据的目的地
  提示:如果要丢弃SELECT的结果,请改用PERFORM   语境:SQL语句中的PL / pgSQL函数myfuntion(整数,整数)第11行

我搜索了这个错误并发现如果查询在使用SELECT时返回null会发生这种情况,但是在命令行上直接执行时我已经获得了值。

还有一些帖子被告知丢弃它我们应该使用PERFORM代替SELECT。所以我在同一个函数中的新查询是

PERFORM COUNT(*) AS count_variable FROM user WHERE something=something;

此功能开始工作后,但count_variable始终为零。我在PERFORM查询后使用raise来检查它。

raise notice 'count_variable: %', count_variable;

count_variable声明为

DECLARE
  count_variable int;
  ...
BEGIN
  count_variable := 0;

我有什么遗漏或做错了,或者COUNT()功能在功能内部无效。如果count()不可用,那么它们是否可以用于计算行数。在某处,我看到@@ROWCOUNT也是一个获取行数的变量,但它会给出错误。

帮助将受到高度赞赏。

1 个答案:

答案 0 :(得分:2)

您不想丢弃选择的结果,因此执行是错误的选择。您希望将查询结果存储在变量中,因此需要INTO子句:


DECLARE
  count_variable int;
  ...
BEGIN
  SELECT COUNT(*) INTO count_variable 
  FROM "user" 
  WHERE something=something;
  ...

仅仅因为您为列提供了与变量同名的别名,并不意味着结果存储在该变量中。列名与变量无关。

本手册对此进行了详细说明。特别是章节Executing a Query with a Single-row Result