如何检查第一个查询是否返回数据,如果是,则返回此数据或在另一个表中搜索?像这样:
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;
感谢克劳斯
答案 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;