4

ソース (作成した Web サービス API を介してキャプチャされたさまざまなハードコードされたキャンペーンから) の列と、それらに関連付ける必要があるそれぞれのブランドを保持するルックアップ テーブルがあります。これは、ブランドが null であるレコードにブランドを付与できるようにするためです。これにより、マーケティング オートメーション ツールを介して特定のテンプレートで歓迎できるようになります。

最終的にはこの API を非推奨にし、ブランドが必要な API に置き換えますが、それまでの間、すべてのブランド チームに API 呼び出しを変更する時間を与えるまで、一時的な解決策を作成する必要があります。

私はこの関数を書きました:

CREATE OR REPLACE FUNCTION public.brand_lookup(IN i_brand TEXT )
  RETURNS SETOF RECORD VOLATILE AS
$$
BEGIN
   RETURN QUERY
     UPDATE subscriber
     SET brand = (SELECT brand FROM brand_translation
                  WHERE source = subscriber.source);
END;
$$
LANGUAGE plpgsql;

そして、レコードが挿入されたときに関数を起動するトリガー:

CREATE TRIGGER brand_translation 
  AFTER INSERT ON subscriber
  FOR EACH ROW EXECUTE PROCEDURE public.brand_lookup();

しかし、私のトリガーは、「エラー: 関数 public.brand_lookup() が存在しません」(しかし、正常に作成されました) というエラーで返されます。 m 意図して? 私は関数にかなり初心者です (おそらくおわかりのように)。

4

2 に答える 2

2

次のように機能する可能性があります。

CREATE OR REPLACE FUNCTION public.f_brand_lookup()
   RETURNS trigger AS
$func$
BEGIN
   SELECT INTO NEW.brand
          bt.brand
   FROM   brand_translation bt
   WHERE  bt.source = NEW.source;

   RETURN NEW;
END
$func$
LANGUAGE plpgsql;

CREATE TRIGGER brand_insert_before_lookup
BEFORE INSERT ON subscriber
FOR EACH ROW EXECUTE PROCEDURE public.f_brand_lookup();

あなたの例には完全に間違っていることが多すぎます。
基礎を学ぶことから始める必要があります。いつものように、私は非常に優れたマニュアルをお勧めします。ここここから
始めてください。

于 2013-03-25T23:38:53.217 に答える
0

Postres では、入力パラメーターに応じて関数をオーバーロードできます。そのため、public.brand_lookup()パラメーターなしで呼び出すと、作成した関数がpublic.brand_lookup(text)見つかりません。関数の呼び出しで必要なパラメーターを渡すか、関数定義でパラメーターを削除する必要があると思います。

于 2013-03-25T21:56:26.807 に答える