【发布时间】:2017-12-03 04:56:07
【问题描述】:
我在 pgsql 中创建了一个存储过程。特定列中有一个 json 对象,我需要获取该 json 对象中数据的总和。它完美地工作,直到它遇到一个空值。 json 对象中的元素可以有空值。但是当我得到总和时,它给出了一个错误。
无法执行语句(22P02 - 7 - 错误:整数的无效输入语法:“”上下文:PL/pgSQL 函数 gettargetreports(date,date) 第 3 行,在 RETURN QUERY)
这是我的存储过程。我该如何解决这个问题。
CREATE OR REPLACE FUNCTION public.gettargetreports(
IN start_dates date,
IN end_dates date)
RETURNS TABLE(report_id integer, report_name text, profileid text,
conv integer, visits integer, avgtime integer, revenue integer,
backlink integer, newvisits integer, bouncerate integer, roomnights
integer, visibility integer, marketshare integer, pagesvisits integer,
transactions integer, domainauthority integer, seocontribution
integer, overallwebvisits integer, newvisitspercentage integer) AS
$BODY$
BEGIN
RETURN QUERY (
(SELECT
rpt.report_id,
rpt.report_name,
rpt.report_data->>'profile' as profileId,
sum((rpt.report_target_data->>'conv')::int)::int as conv,
sum((rpt.report_target_data->>'visits')::int)::int as visits,
sum((rpt.report_target_data->>'avgTime')::int)::int as avgTime,
sum((rpt.report_target_data->>'revenue')::int)::int as revenue,
sum((rpt.report_target_data->>'backlink')::int)::int as backlink,
sum((rpt.report_target_data->>'newVisits')::int)::int as newVisits,
sum((rpt.report_target_data->>'bounceRate')::int)::int as bounceRate,
sum((rpt.report_target_data->>'roomNights')::int)::int as roomNights,
sum((rpt.report_target_data->>'visibility')::int)::int as visibility,
sum((rpt.report_target_data->>'marketshare')::int)::int as marketshare,
sum((rpt.report_target_data->>'pagesVisits')::int)::int as pagesVisits,
sum((rpt.report_target_data->>'transactions')::int)::int as transactions,
sum((rpt.report_target_data->>'domainAuthority')::int)::int as domainAuthority,
sum((rpt.report_target_data->>'seoContribution')::int)::int as seoContribution,
sum((rpt.report_target_data->>'overallWebVisits')::int)::int as overallWebVisits,
sum((rpt.report_target_data->>'newVisitsPercentage')::int)::int as newVisitsPercentage
FROM public.proc_targetreport as rpt
WHERE (
rpt.start_date >= (date_trunc('MONTH', start_dates))::date AND
rpt.end_date <= (date_trunc('MONTH', end_dates))::date
)
GROUP BY rpt.report_id,rpt.report_name,profileId
)
);
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
ROWS 1000;
report_target_data 是 json 对象列名
【问题讨论】:
-
我宁愿说,空值,而不是空值
标签: php mysql postgresql stored-procedures