私は2つのカーソルを使ってテーブルを更新する関数をpostgresqlに書いています。コードはエラーなく正常に実行されますが、何もしません。PostgreSQLのカーソルと更新
私が1からプロダクトキーを取得してからでてる、以下の機能にそう3つのテーブル
- 商品マスタ
- 売上データテーブル
- ターゲット表
を持っています製品が販売された店舗/店舗の数を計算した後、それに応じて第3のテーブルを更新する販売テーブル
毎週各製品のアウトレットの数を計算する必要があります。しかし、それらはユニークでなければなりません。例えば、製品が最初の週に店舗AとBで販売された場合、最初の週の店舗数は2でなければならず、B、C、Dで販売された場合は、 3週目にAとDで販売されている場合は、3週間目の合計は4です。どうすればいいの?
ご協力いただきますようお願い申し上げます。
create or replace function StCount() returns void as
$BODY$
Declare
ik1 integer ;
wk1 integer ;
Cur1 CURSOR FOR SELECT ik From table1 ;
Cur2 CURSOR FOR SELECT distinct(wk) FROM table2 order by wk asc;
begin
OPEN Cur1 ;
WHILE (Found) Loop
FETCH next from Cur1 INTO ik1 ;
OPEN Cur2 ;
WHILE (Found) Loop
FETCH next from Cur2 INTO wk1;
update table3 set skly =(select count(sk)from table2 a
where a.ik = ik1 and a.wk = wk1
and a.sk not in (select distinct (sk) from table2
where ik = ik1 and wk <= wk1 - 1))
where ik = ik1 and wk = w1
;
End loop ;
CLOSE Cur2;
end loop ;
CLOSE Cur1;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
なぜ最初にカーソルを使用しているのですか?これは、単一の更新ステートメントではるかに効率的に行うことができます( 'distinct'は*** NOT ***関数です) –
私は、別のものを関数として定義したのはどこですか? – puzeledbysql
私は、テーブル全体をスキャンして必要な値をカウントするたびにカーソルを使用しているので、単一の更新でどのように達成されるのかよく分かりません – puzeledbysql