在返回之前检查Postgres函数中的结果计数

时间:2017-01-30 21:38:57

标签: postgresql

我有一个postgres函数,我想返回一个查询的结果,但如果该查询匹配多条记录,我希望它不返回任何内容。

所以,比如:

CREATE OR REPLACE FUNCTION myFunc(_a text, _b text)
  RETURNS yy
  LANGUAGE plpgsql
  STABLE
  PARALLEL SAFE
  AS $$
BEGIN
  RETURN QUERY
    SELECT *
    FROM yy
    WHERE a = x
      AND b = y;
END;
$$;

除非,如果该查询匹配多条记录,则不应返回任何内容。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

CREATE OR REPLACE FUNCTION myFunc(_a text, _b text)
  RETURNS SETOF yy -- To be able to return "nothing"
  LANGUAGE plpgsql
  STABLE
  PARALLEL SAFE
  AS $$
DECLARE
  result yy;
BEGIN
  SELECT *
  INTO STRICT result -- STRICT allows to check that exactly one row returned
  FROM yy
  WHERE a = x
    AND b = y;
  RETURN NEXT result; -- RETURN NEXT - return yet another row for "RETURNS SETOF" function
EXCEPTION
  WHEN no_data_found OR too_many_rows THEN -- When no data or more then one rows
    RETURN; -- Nothing to return, just exit
END;
$$;

答案 1 :(得分:0)

我想这可以帮到你。

function IsNullOrWhitespace($str)
{
    if ($str)
    {
        return ($str -replace " ","" -replace "`t","").Length -eq 0
    }
    else
    {
        return $TRUE
    }
}