Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL函数返回表_Sql_Postgresql_Function - Fatal编程技术网

PostgreSQL函数返回表

PostgreSQL函数返回表,sql,postgresql,function,Sql,Postgresql,Function,我想在PostgreSQL上设置一个返回表的函数。这是函数的源代码: CREATE OR REPLACE FUNCTION feiertag(inDate Date) RETURNS TABLE (eingabeDatum DATE, f_heute INT, f_1 INT, f_2 INT, f_3 INT, f_5 INT) AS $$ DECLARE f_heute integer := 0;

我想在PostgreSQL上设置一个返回表的函数。这是函数的源代码:

   CREATE OR REPLACE FUNCTION feiertag(inDate Date) 
     RETURNS TABLE (eingabeDatum DATE, f_heute INT, f_1 INT, f_2 INT, f_3 INT, f_5 INT) 
    AS $$
            DECLARE
              f_heute integer := 0;
              f_1 integer := 0;
              f_2 integer := 0;
              f_3 integer := 0;
              f_5 integer := 0;
            BEGIN
                    SELECT 1 INTO f_heute FROM feiertage where datum = inDate;
                    SELECT 1 INTO f_1 FROM feiertage where datum = (inDate + interval '1' day);
                    SELECT 1 INTO f_2 FROM feiertage where datum = (inDate + interval '2' day);
                    SELECT 1 INTO f_3 FROM feiertage where datum = (inDate + interval '3' day);
                    SELECT 1 INTO f_5 FROM feiertage where datum = (inDate + interval '5' day);

   RETURN QUERY SELECT inDate as eingabeDatum, coalesce(f_heute, 0) as f_heute, coalesce(f_1,0) as f_1, coalesce(f_2,0) as f_2, coalesce(f_3,0) as f_3, coalesce(f_5,0) as f_5 ;
            END;
    $$ LANGUAGE plpgsql;
调用该函数仅返回一列,其中包含“,”分隔值:

psql (9.5.12)
Type "help" for help.

tarec=> select feiertag('2017-01-01');
        feiertag        
------------------------
 (2017-01-01,1,0,0,0,0)
(1 row)
我希望有不同的列(每个值对应一个列,因为表在函数开头指定),而不是只有一个列包含所有值。有人知道为什么会发生这种情况吗?我怎样才能解决这个问题

谢谢 Timo的使用

SELECT *
       FROM feiertag('2017-01-01');
而不是

SELECT feiertag('2017-01-01');
以表格的形式获取结果


(将函数视为一个表。)

感谢您节省了更多的时间,这很好!