広告とログの 2 つのテーブル (postgres 内) があります。ログ テーブルに挿入するたびに、アクションに応じて、ads テーブル内の列のカウントをインクリメントする必要があります。
トリガーが呼び出す関数を作成しようとしましたが、関数を作成しようとするとエラーがスローされます。私はpostgresqlのトリガーと関数を初めて使用するので、誰かがこれの何が問題なのかを指摘できます.
create function update_ad_count (action character(4), ad_id INT) returns void
as $$case when action='VIEW' then
(UPDATE ads SET views = (SELECT views+1 FROM ads WHERE id=ad_id), updated = now() WHERE id=ad_id;)
end;$$
language sql
私が得るエラーは
ERROR: syntax error at or near "case"
LINE 2: as $$case when action=\'VIEW\' then
^
更新: @Tomalak: 関数と update ステートメントの更新に感謝します (駄洒落に抵抗できませんでした)。
多くのグーグル検索の結果、関数にはパラメーターがなく、NEW.col_name を使用し、TRIGGER を返す必要があることがわかりました。