这里有一个非常相似的问题,但与这个问题不完全相同。
我有一个函数,它使用IF
语句来确定SELECT
要返回的查询类型。
CREATE FUNCTION
当我永远不知道其中的SELECT
查询可能返回的确切列时,如何声明语句应返回的内容?也就是说,我无法RETURNS TABLE
使用列列表设置声明,因为我不知道哪些列可能会返回。我所知道的是,我肯定希望返回一个结果表。
这是我的功能(未完成,伪):
CREATE OR REPLACE FUNCTION functiona(_url character varying DEFAULT NULL)
RETURNS -- what type? if TABLE how do I know what columns to specify
LANGUAGE plpgsql
AS
$$
DECLARE
_urltypeid int;
BEGIN
IF _url IS NOT NULL
THEN
_urltypeid := reference.urltype(_url);
IF _urltypeid = 1
THEN
RETURN QUERY
SELECT location, auxiliary, response FROM tablea -- unique columns from one table
END IF;
IF _urltypeid = 2
THEN
RETURN QUERY
SELECT ip, location, host, authority FROM tableb -- unique columns from another table
END IF;
END IF;
END;
$$;
我来自 MS SQL Server 背景,我不必在CREATE FUNCTION
语句中指定要返回的内容,因此这对我来说非常混乱。