2017-08-04 67 views
1

我試圖記錄或JSON存儲到一個數組中,並從一個函數返回一個JSON:PLPGSQL:儲存於For循環每個記錄並返回JSON

CREATE OR REPLACE FUNCTION stat_per_day() RETURNS json AS $$ 
DECLARE 
RR RECORD; 
SS json[]; 
BEGIN 
    FOR RR IN (SELECT DISTINCT date 
     FROM timetable WHERE date<CURRENT_DATE ORDER BY date ASC) 
    LOOP 
    SELECT row_to_json(A) INTO SS FROM (SELECT RR.date as Dia, count(*) Total 
    FROM dates WHERE office_date=RR.date) A; 
    END LOOP; 
    RETURN json_agg(SS); 
END; $$ 
LANGUAGE plpgsql; 

錯誤:

ERROR: malformed array literal: "{"dia":"2017-07-24","total":228}" 
DETAIL: Unexpected array element. 
CONTEXT: PL/pgSQL function stat_per_day() line 8 at SQL statement 

該查詢稍微複雜一些,但想法是在json數組或記錄數組(我認爲不存在)中「保存」每個forloop查詢,並在循環之後,從數組中返回一個完整的json。

回答

0

可能你不需要LOOP循環?這個任務可以使用json_build_object功能,例如:

CREATE OR REPLACE FUNCTION stat_per_day() RETURNS json AS $$ 
DECLARE 
SS json; 
BEGIN 
    select json_agg(j order by (j->>'dia')::date) from (
     SELECT json_build_object('dia', office_date, 'Total', count(*)) as j 
     from dates 
     where 
     office_date in (SELECT date FROM timetable WHERE date<CURRENT_DATE) 
     group by office_date 
    ) t 
    into SS; 

    RETURN SS; 
END; $$ 
LANGUAGE plpgsql;