1

我刚刚开始使用 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也是如此,大概是因为仍在返回一行(空整数)?如何重写它以便找到一个整数返回,否则什么都没有?

4

1 回答 1

1

您的假设是正确的,如果最后一条语句返回一行,FOUND则设置为TRUE,无论值如何(可能是NULL您的情况)。手册中的详细信息在这里

重写为,例如:

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$;
于 2012-06-20T19:43:48.100 回答