Postgresql Postgres执行计数(*)始终返回0

Postgresql Postgres执行计数(*)始终返回0,postgresql,stored-procedures,plpgsql,Postgresql,Stored Procedures,Plpgsql,我在SQL中查询postgres以获取计数 SELECT COUNT(*) AS count_variable FROM user WHERE something=something; 当我执行时,它正在返回计数。然后根据要求,这个查询是在Postgres函数中需要的。当我在函数中使用这个查询时,Postgres回答 错误:查询没有结果数据的目标 提示:如果要放弃选择的结果,请使用“执行”。 上下文:PL/pgSQL函数myFunction(整数,整数)SQL语句的第11行 我搜索了这个错误,

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

SELECT COUNT(*) AS count_variable FROM user WHERE something=something;
当我执行时,它正在返回计数。然后根据要求,这个查询是在Postgres函数中需要的。当我在函数中使用这个查询时,Postgres回答

错误:查询没有结果数据的目标
提示:如果要放弃选择的结果,请使用“执行”。
上下文:PL/pgSQL函数myFunction(整数,整数)SQL语句的第11行

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

还有一些帖子告诉我们放弃它,我们应该使用
PERFORM
而不是
SELECT
。所以我在同一个函数中的新查询是

PERFORM COUNT(*) AS count_variable FROM user WHERE something=something;
此函数开始工作后,但count_变量始终为零。我在执行查询后使用raise检查它

raise notice 'count_variable: %', count_variable;
count_变量声明为

DECLARE
  count_variable int;
  ...
BEGIN
  count_variable := 0;
是否有我遗漏或做错的地方,或者COUNT()函数在函数内部不起作用。如果count()不可用,则可以使用它们来计算行数。在我看到的某个地方,
@@ROWCOUNT
也是一个获取行计数的变量,但它给出了错误


非常感谢您的帮助。

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


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

声明
计数变量int;
...
开始
在COUNT_变量中选择COUNT(*)
来自“用户”
某物=某物;
...
仅仅因为给列指定了与变量同名的别名,并不意味着结果存储在该变量中。列名与变量没有关系


本手册对此进行了详细说明。尤其是章节

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


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

声明
计数变量int;
...
开始
在COUNT_变量中选择COUNT(*)
来自“用户”
某物=某物;
...
仅仅因为给列指定了与变量同名的别名,并不意味着结果存储在该变量中。列名与变量没有关系


本手册对此进行了详细说明。特别是这一章

可能你使用过MSSQL-PostgreSQL中的存储过程有很大的不同-更像Oracle-请先阅读文档-这几页谢谢您的信息,先生。已接受答案中给出的问题,并给出解释。我使用的是
AS
而不是
INTO
作为变量。可能您使用的是MSSQL-PostgreSQL中的存储过程明显不同-更像Oracle-请先阅读文档-这是几页感谢您提供的信息,先生。已接受答案中给出的问题,并给出解释。我使用
作为
而不是
作为
变量。