- 论坛徽章:
- 0
|
非常感谢你的回复,我才学这个没几天,但是现在必须搞定这个问题,急啊,再帮忙看看,多谢!
表结构:
CREATE TABLE stub
(
uid integer,
bid integer,
sz integer,
ct integer
)
WITH (
OIDS=FALSE
);
ALTER TABLE stub OWNER TO postgres;
stub2和stub完全相同。
用你说的CTE执行不下去啊,只能执行下面这样的语句:
with tbltmp(a1, a2, a3, a4) as
(
select uid, bid, sum(sz), sum(ct)
from stub2
group by uid, bid
order by uid
)
select * from tbltmp
如果是:
with tbltmp(a1, a2, a3, a4) as
(
select uid, bid, sum(sz), sum(ct)
from stub2
group by uid, bid
order by uid
)
update stub
set uid = 0
from tbltmp
where tbltmp.a1 = uid;
就会报错,提示update处语法错误。
我也尝试写了下面的方方法,创建函数没有问题,但是执行的时候就报错。
CREATE OR REPLACE FUNCTION getcursor()
RETURNS SETOF refcursor AS
$BODY$
declare
BEGIN
select * from (
select uid, bid, sum(sz), sum(ct)
from stub2
group by uid, bid
order by uid)
as tbltmp(a1, a2, a3, a4);
update stub
set sz = sz + tbltmp.a3, ct = ct + tbltmp.a4
from tbltmp
where uid = tbltmp.a1 and bid = tbltmp.a2;
RETURN;
END;
$BODY$ LANGUAGE plpgsql; |
|