检查PostgreSQL函数中的行数

时间:2019-02-21 10:30:00

标签: postgresql

如何检查第一个查询是否返回数据,如果是,则返回此数据或在另一个表中搜索?像这样:

CREATE OR REPLACE FUNCTION finddata() RETURNS TABLE (content text) AS $$
BEGIN
  # now pseudocode
  x = SELECT foo FROM bar WHERE ....;
  if num_rows(x) > 0
    return x
  else
    RETURN QUERY SELECT foo FROM bar2 WHERE ....;
END;
$$ LANGUAGE plpgsql;

感谢克劳斯

2 个答案:

答案 0 :(得分:1)

您可以以更简单的方式进行操作,而无需检查数据是否存在-我已经在更多函数中成功使用了此结构(函数在第一次返回查询后不会结束-您可以按顺序依次使用其中的几个函数都返回相同的结构-我在必要时也使用它):

CREATE OR REPLACE FUNCTION finddata() RETURNS TABLE (content text) AS $$
DECLARE
  cnt int;
BEGIN
  RETURN QUERY SELECT foo FROM bar WHERE ....;
  GET DIAGNOSTICS cnt = ROW_COUNT;
  if cnt = 0 then
    RETURN QUERY SELECT foo FROM bar2 WHERE ....;
  end if;
END;
$$ LANGUAGE plpgsql;

答案 1 :(得分:0)

使用IF EXISTS

CREATE OR REPLACE FUNCTION finddata() 
RETURNS TABLE (content text) AS $$
  BEGIN
  IF EXISTS ( SELECT foo FROM bar WHERE .... )
   THEN
    return QUERY SELECT foo FROM bar;
  else
    RETURN QUERY SELECT foo FROM bar2 WHERE ....;
END;
$$ LANGUAGE plpgsql;