5

我是 postgres 的新手,遇到了一个在 Stackoverflow (?) 上似乎找不到的错误。我正在尝试编写一个函数,当一个人有资格获得工作时返回 true,否则返回 false。这会引发“错误:当函数不返回集合时,ROWS 不适用。” 在西班牙语中找到了一些东西——但在 SO 上什么也没有。有人可以解释一下吗?

CREATE OR REPLACE FUNCTION "isPersonQualifiedForJob"(pid integer, jid integer)
  RETURNS bit AS
'
        IF 
        (SELECT count(*) FROM "getSkillsForJob"("jid") "j" WHERE 
        NOT EXISTS ( 
                    SELECT 1 FROM "getSkillsForPerson"("pid") "p" WHERE "j"."SkillID"="p"."SkillID" 
                   )
        )> 0 
        THEN 
           return 0;
        ELSE
           return 1;
        END IF;
'
  LANGUAGE sql VOLATILE
  COST 100
  ROWS 1000;
ALTER FUNCTION "isPersonQualifiedForJob"(integer)
  OWNER TO postgres; 
4

2 回答 2

8

在这一行:

ROWS 1000;

您告诉计划者您希望从函数返回大约 1,000 行,但它被声明为只返回一个值,有点:

RETURNS bit AS
于 2013-03-27T15:03:21.343 回答
4

信息很清楚,文档

ROWS 结果行

一个正数,给出规划器应该期望函数返回的估计行数。仅当函数被声明为返回一个集合时才允许这样做。默认假设为 1000 行。

您的函数不是返回一组行,而是一个布尔值,因此我不知道您为什么要添加该行ROWS 1000(从其他函数复制粘贴?)。只需将其删除,您应该会没事的。

于 2013-03-27T15:03:21.717 回答