[pgsql-jp: 25095] TRIGGER作成でエラー
Tsukasa Koizumi
tsukasa @ koiz.com
2002年 3月 6日 (水) 10:59:17 JST
小泉と申します。
CREATE TRIGGERがエラーになってしまいます。
SQL文は下記のようなものです。
作成したいこのTRIGGERは、ECシステムの在庫統計情報(items_status)を、
受注情報(saledetails)が更新された段階で、自動的に更新するための物で
す。
CREATE FUNCTIONは成功しており、関数calc_i_status()は正常に機能しています。
が、TRIGGERを設定しようとすると
ERROR: CreateTrigger: function calc_i_status() does not exist
となります。
いろいろ調べてみたのですが、どうにも原因がよくわかりません。
ご教授いただけると助かります。
【環境】
RedHat 6.2
PostgreSQL 7.1.3
よろしくお願いします。
----------------------------------------------------------------------
CREATE FUNCTION calc_i_status ( int4 )
RETURNS bool AS
'DELETE FROM items_status WHERE id = $1;
INSERT INTO items_status
SELECT *, now() AS stamp FROM
-- items + ( item_category + categories )
( SELECT * FROM
-- items
( SELECT id,code,name,saleprice,costprice FROM items WHERE id = $1 ) AS i
LEFT OUTER JOIN
-- item_category + categories
( SELECT id,"group",element,name AS elname FROM
( SELECT * FROM item_category WHERE id = $1 ) AS xic
LEFT OUTER JOIN
categories USING ( "group", element ) ) AS c
USING ( id ) ) AS ic
LEFT OUTER JOIN
-- carried in + carried out + carried adj + in + out + will out + adj
( SELECT * FROM
-- carried in + carried out + carried adj
( SELECT * FROM
-- from carried in + carried out
( SELECT * FROM
-- carried in
( SELECT item,SUM( quant ) AS carried_in FROM saledetails WHERE sales = 101 AND stamp < date_trunc( ''month'', now() ) AND item = $1 GROUP BY item ) AS sd
FULL OUTER JOIN
-- carried out
( SELECT item,( SUM( quant ) - SUM( cancel ) ) AS carried_out FROM saledetails WHERE sales > 10000000 AND delivinfo AND stamp < date_trunc( ''month'', now() ) AND item = $1 GROUP BY item ) AS co
USING ( item ) ) AS cico
FULL OUTER JOIN
-- carried adj
( SELECT item,SUM( quant ) AS carried_adj FROM saledetails WHERE sales = 201 AND stamp < date_trunc( ''month'', now() ) AND item = $1 GROUP BY item ) AS ca
USING ( item ) ) AS cicoca
FULL OUTER JOIN
-- in + out + will out + adj
( SELECT * FROM
-- in + out + will out
( SELECT * FROM
-- in + out
( SELECT * FROM
-- in
( SELECT item,SUM( quant ) AS "in" FROM saledetails WHERE sales = 101 AND stamp >= date_trunc( ''month'', now() ) AND item = $1 GROUP BY item ) AS ni
FULL OUTER JOIN
-- out
( SELECT item,( SUM( quant ) - SUM( cancel ) ) AS "out" FROM saledetails WHERE sales > 10000000 AND delivinfo AND stamp >= date_trunc( ''month'', now() ) AND item = $1 GROUP BY item ) AS no
USING ( item ) ) AS nino
FULL OUTER JOIN
-- adj
( SELECT item,SUM( quant ) as "adj" FROM saledetails WHERE sales = 201 AND stamp >= date_trunc( ''month'', now() ) AND item = $1 GROUP BY item ) AS aj
USING ( item ) ) AS ninoaj
FULL OUTER JOIN
-- will out
( SELECT item,( SUM( quant ) - SUM( cancel ) ) AS "will_out" FROM saledetails WHERE sales > 10000000 AND ( NOT delivinfo ) AND item = $1 GROUP BY item ) AS ninoajwo
USING ( item ) ) AS ninowo
USING ( item ) ) AS stocks
ON id = item
WHERE id >= 10000;
SELECT TRUE;'
LANGUAGE 'sql';
CREATE TRIGGER trig_calc_i_status
AFTER INSERT OR UPDATE OR DELETE ON saledetails FOR EACH ROW
EXECUTE PROCEDURE calc_i_status ( item);
----------------------------------------------------------------------
小泉 司@コイズコム デジタルワークス(東京都文京区)
Desk - mailto:tsukasa @ koiz.com / Mobile - mailto:pigtail @ pdx.ne.jp
PGP Public Key - http://www.koiz.com/~tsukasa/PGP_KEY/tsukasa.asc
----------------------------------------------------------------------
pgsql-jp メーリングリストの案内