我刚刚开始使用 PostgreSQL 中的函数,这可能是非常基础的,但这是如何完成的?
我希望能够在函数中使用以下内容:
PERFORM id_exists();
IF FOUND THEN
-- Do something
END IF;
id_exists()
函数(与 SELECT 和 PERFORM 一起使用)是:
CREATE OR REPLACE FUNCTION id_exists() RETURNS int AS $$
DECLARE
my_id int;
BEGIN
SELECT id INTO my_id
FROM tablename LIMIT 1;
RETURN my_id;
END;
$$ LANGUAGE plpgsql;
目前,即使 my_id
不存在于表中,FOUND
为真,大概是因为仍在返回一行(空整数)?如何重写,以便在找到时返回一个整数,否则什么也没有?
最佳答案
您的假设是正确的,如果最后一条语句返回一行,则 FOUND
设置为 TRUE
,而不管值(可能是 NULL
在你的情况下)。手册中的详细信息here .
例如重写为:
IF id_exists() IS NOT NULL THEN
-- Do something
END IF;
或者用SETOF
重写你的函数的返回值,这样它就可以返回多行——或者没有行!像我演示的那样使用 RETURN QUERY
。您可以在您的原始设置中使用此功能。
CREATE OR REPLACE FUNCTION id_exists()
RETURNS SETOF int LANGUAGE plpgsql AS
$BODY$
BEGIN
RETURN QUERY
SELECT id
FROM tablename
LIMIT 1;
END;
$BODY$;
或者,使用语言SQL函数更简单:
CREATE OR REPLACE FUNCTION id_exists()
RETURNS SETOF int LANGUAGE sql AS
$BODY$
SELECT id
FROM tablename
LIMIT 1;
$BODY$;
关于sql - 编写一个 PL/pgSQL 函数,以便在找到 "nothing"时不设置 FOUND?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11126924/