Re: extend INSERT by 'INSERT INTO table FETCH ... FROM cursor' syntax
От | Alexander Vlasenko |
---|---|
Тема | Re: extend INSERT by 'INSERT INTO table FETCH ... FROM cursor' syntax |
Дата | |
Msg-id | 200310272154.05356.intrnl_edu@ilyichevsk.odessa.ua обсуждение исходный текст |
Ответ на | Re: extend INSERT by 'INSERT INTO table FETCH ... FROM cursor' syntax (Josh Berkus <josh@agliodbs.com>) |
Список | pgsql-sql |
On Monday 27 October 2003 21:35, Josh Berkus wrote: > Alexander, > > > > BEGIN; > > > DECLARE total CURSOR > > > FOR SELECT=20 > > > SUBSTR(datetime,1,7)||'-01 00:00:00' as month, > > > client, > > > SUM(money) > > > FROM stat > > > WHERE SUBSTR(datetime,1,7)=3D'2003-10' > > > GROUP BY month,client; > > > DELETE FROM stat WHERE SUBSTR(datetime,1,7)=3D'2003-10'; > > > INSERT INTO stat FETCH ALL FROM total; > > > COMMIT; [ BTW: quoted-printable is evil ;) ] > > > > > > but it does not work, chokes on FETCH ALL. > > Well, there's two problems with your program: > > 1) INSERT INTO .... FETCH ALL is not currently implemented. You would need > to use a loop, and insert one row at a time by value. Exactly. I was saying that if implemented it may be useful. My example is certainly doable without it but it quickly gets ugly since I can't use this nifty trick. > 2) You can't insert the rows you've just deleted from the base tables. In > your example, the TOTAL cursor would be empty. I think that what you > really want is a temp table. Why do you think it would be empty? It is not. I tried this: BEGIN; DECLARE total CURSORFOR SELECT SUBSTR(datetime,1,7)||'-01 00:00:00' as month, client, SUM(money)FROM statWHERE SUBSTR(datetime,1,7)='2003-10'GROUPBY month,client; DELETE FROM stat WHERE SUBSTR(datetime,1,7)='2003-10'; FETCH ALL FROM total; <=================================== COMMIT; and it does work as expected. FETCH spews out already deleted rows. There is no problem with it. -- Alexander Vlasenko
В списке pgsql-sql по дате отправления: