关于postgrs数据库存储过程:

sword_caihui 2007-04-19 02:38:47
存储过程如下:
CREATE FUNCTION dcx_store_9 (puser_id character varying, psite_id character varying, ptime date) RETURNS INTEGER AS $$
DECLARE
exist_time date;
new_day_interval integer;
exist_count integer;
exist_avg integer;
cursorSelect refcursor;
var_integer integer; BEGIN
select * from user_dtl_9 where user_id=puser_id;
IF NOT FOUND THEN
INSERT INTO user_dtl_9 (user_id) VALUES(puser_id);
INSERT INTO user_site_rel_9 (user_id,site_id,count,time)values(puser_id,psite_id,1,ptime);
ELSE
OPEN cursorSelect FOR select time,count,days_avg from user_site_rel_9 where user_id=puser_id and site_id=psite_id;
FETCH cursorSelect INTO exist_time, exist_count, exist_avg;
GET DIAGNOSTICS var_integer = ROW_COUNT;
CLOSE cursorSelect;
IF var_integer > 0 THEN
new_day_interval:=ptime-exist_time;
exist_avg:=(exist_count*exist_avg+new_day_interval)/(exist_count+1);
exist_count:=exist_count+1;
update user_site_rel_9
set count=exist_count,time=ptime,days_avg=exist_avg
where user_id=puser_id and site_id=psite_id;
ELSE
INSERT INTO user_site_rel_9 (user_id,site_id,count,time)
values(puser_id,psite_id,1,ptime);
END IF;
END IF;
RETURN 1;
END $$ LANGUAGE plpgsql;
------------------------------------------------
JDBC调用:user_site_rel_9(?,?,?)

-----------------------------------------------
报如下异常:
org.postgresql.util.PSQLException: ERROR: query has no destination for result data
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1548)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1316)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:191)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:452)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:351)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:344)
...
----------------------------------------------------------
请问达人们帮忙指正,非常感谢
...全文
280 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
sword_caihui 2007-04-19
  • 打赏
  • 举报
回复
问题已解决
如下:
CREATE OR REPLACE FUNCTION dcx_store_0(puser_id bpchar, psite_id bpchar, ptime date)
RETURNS integer AS
$BODY$
DECLARE
exist_time date;
resultQuery RECORD;
new_day_interval integer;
exist_count integer;
exist_avg integer;
--cursorSelect refcursor;
var_integer integer; BEGIN
select into resultQuery * from user_dtl_0 where user_id=puser_id;
IF resultQuery.user_id IS NULL THEN
INSERT INTO user_dtl_0 (user_id) VALUES(puser_id);
INSERT INTO user_site_rel_0 (user_id,site_id,count,time)values(puser_id,psite_id,1,ptime);
ELSE
select into resultQuery * from user_site_rel_0 where user_id=puser_id and site_id=psite_id;
IF resultQuery.count<>0 THEN
exist_time = resultQuery.time;exist_avg=resultQuery.days_avg;exist_count=resultQuery.count; new_day_interval:=ptime-exist_time;
exist_avg:=(exist_count*exist_avg+new_day_interval)/(exist_count+1);
exist_count:=exist_count+1;
update user_site_rel_0 set count=exist_count,time=ptime,days_avg=exist_avg where user_id=puser_id and site_id=psite_id;
ELSE
INSERT INTO user_site_rel_0 (user_id,site_id,count,time)values(puser_id,psite_id,1,ptime);
END IF; END IF; RETURN 1; END $BODY$
LANGUAGE 'plpgsql' VOLATILE;
sword_caihui 2007-04-19
  • 打赏
  • 举报
回复
注:postgres版本:8.2

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧