我在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
也是一个获取行数的变量,但它会给出错误。
帮助将受到高度赞赏。
答案 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