我是postgres的新手,并尝试设置一个返回一点的函数。
我一直收到错误
函数的final语句必须是SELECT或INSERT / UPDATE / DELETE 回来。
我理解
这是代码
CREATE OR REPLACE FUNCTION "f"(...)
RETURNS bit AS
DO $$
Begin
IF someStuff
THEN
0; //also tried select 0 //also tried return 0
ELSE
1; //also tried select 1 //also tried return 0
END IF;
0; //also tried select 0 //also tried return 0
END $$
我的语法错在哪里?
答案 0 :(得分:2)
有几个错误:
DO
错误return
返回函数的结果所以你的功能变成了:
CREATE OR REPLACE FUNCTION f(some_value integer)
RETURNS bit AS
$$
Begin
IF (some_value = 1)
THEN
return 0;
ELSE
return 1;
END IF;
END $$
language plpgsql
但是你应该使用boolean
而不是bit来返回true / false标志:
CREATE OR REPLACE FUNCTION f(some_value integer)
RETURNS boolean AS
$$
Begin
IF (some_value = 1)
THEN
return false;
ELSE
return true;
END IF;
END $$
language plpgsql
答案 1 :(得分:1)
如果你想使用plpgsql,那么就像在a_horse的答案中一样,但如果你不需要在sql中执行plpgsql:
create or replace function f(some_value integer)
returns boolean as $$
select some_value = 1;
$$
language sql;
如果该函数是来自this question的函数,则可以执行此操作:
create or replace function isPersonQualifiedForJob(pid integer, jid)
returns boolean as $$
select exists (
select 1
from
getskillsforjob(jid) j
inner join
getskillsforperson(pid) p on j.skillid = p.skillid
)
$$
language sql;
检查exists
比计算要快得多,因为它足以找到第一个匹配。