我正在创建我的第一个sql函数,因为我想多次调用同一个查询但只是更改月份
这是我的功能
SELECT YEAR(post_date) AS y, count(ID) as posts_count
FROM fdr_posts p
WHERE
p.post_status = 'publish'
OR p.post_status = 'future'
AND p.post_type = 'event'
GROUP BY y
ORDER BY post_date ASC
然后我尝试调用函数
create function sevRun (string,int,int)
returns int
stable
as $$
SELECT count(*) from (
SELECT case_id,
FROM dbname.tablename
WHERE create_date >= TO_DATE('2017-$1-01', 'YYYY-MM-DD')
AND create_date < TO_DATE('2017-$2-01', 'YYYY-MM-DD')
AND min_impact <= $3
AND assigned_to_group IN ('listitem1','listitem2',...)
end
$$language sql$$;
但是我收到以下错误
select sevRun (01,02,2);
我猜我在调用中遇到了很多Invalid operation: cannot insert multiple commands into a prepared statement;
个查询。我只想计算我的选择查询返回的行数,但我想每个月运行一次查询。
答案 0 :(得分:1)
这里有很多问题。
$$
会搞砸了plpgsql
结束end
个功能,但不要使用SQL函数执行此操作。您的功能应如下所示:
create function sevRun (string,int,int)
returns int stable as $$
SELECT count(*) from (
SELECT case_id,
FROM dbname.tablename
WHERE create_date >= TO_DATE('2017-' || $1 || '-01', 'YYYY-MM-DD')
AND create_date < TO_DATE('2017-' || $2::text || '-01', 'YYYY-MM-DD')
AND min_impact <= $3
AND assigned_to_group IN ('listitem1','listitem2',...)
) inline_view
$$language sql;