2017-06-13 12 views
0

私はカラムbuilderとpermit_numberを持つ2つのテーブルpermit_tableを持っています。 weekly_tableとapplicantとpermit_numberカラム。 ここで、permit_tableのビルダー列に更新がある場合、permit_tableの更新されたビルダー値の許可番号が任意の許可番号と一致する必要がある場合、weekly_tableのapplicantcolumnを '古い申請者の値+新しいBuilderの値' weekly_tableで私は下記のトリガーと機能postgresqlの更新トリガーの後に1つのテーブルから別のテーブルに値を更新

CREATE OR REPLACE FUNCTION edmonton.automated_builder_update_trigger_manual() 
RETURNS trigger AS 
$BODY$ 
DECLARE 
    e record; 
BEGIN 

EXECUTE format('Update weekly_table as a 
set applicant = old.applicant||new.builder where old.permit_number = 
a.permit_number'); 


RETURN NULL; 
END; 
$BODY$ 
LANGUAGE plpgsql VOLATILE 
COST 100; 
ALTER FUNCTION edmonton.automated_builder_update_trigger_manual() 
OWNER TO postgres; 

とトリガとしようとした は古い 『「のテーブルの句エントリから欠落』というエラーを

CREATE TRIGGER builder_update_trigger_manual 
AFTER UPDATE 
ON edmonton.permit_table 
FOR EACH ROW 
WHEN (old.builder IS DISTINCT FROM new.builder) 
EXECUTE PROCEDURE edmonton.automated_builder_update_trigger_manual(); 

を取得しています。変更

+1

は* OLD持っている関数の本体に直接UPDATEを書くとNEW *補間されます。なぜなら、SQLは 'old'を実際のテーブルとして探すのと反対に、補間を要求している' EXECUTE'にクエリを渡すこととは対照的です。 –

+0

ありがとうございました。 –

答えて

0
EXECUTE format('Update weekly_table as a 
set applicant = old.applicant||new.builder where old.permit_number = 
a.permit_number'); 

試してみてください。

EXECUTE format('Update weekly_table as a 
set applicant = ($1).applicant||($2).builder where ($1).permit_number = 
a.permit_number') using old,new; 
+0

お返事ありがとうございます。私はこれを試した。それは、 'COLUMN申請者がデータ型permit_tableに見つかりませんでした。'というエラーを発生させます。申請者フィールドは、weekly_tableで利用可能になります。これを解決するにはどうすればよいでしょうか? –

+0

とDanielsの提案 - 更新文を直接書くだけですか?トリックを行う必要があります –

関連する問題