我刚刚开始使用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
也是如此,可能是因为仍然返回一行(空整数)?如何重写这样,如果找到则返回一个整数,否则什么都没有?
答案 0 :(得分:1)
您的假设是正确的,如果最后一个语句返回一行,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$;