2016-10-23 4 views
1

に応じて、別のテーブルに行を削除しますuseridを検索し、表secondに同じuseridを検索します。存在する場合は、visibility_matrixから行/行を削除します。companyidはテーブル 'second'から抽出されます。ここでトリガーは、私は次の表のトリガーを作成しようとしています3番目のテーブル

は、私が試したものです:

トリガ機能:

CREATE OR REPLACE FUNCTION pos_org_rel_refresh() 
    RETURNS trigger AS 
$$ 
DECLARE 
    r Integer ; 

BEGIN 

IF TG_OP='UPDATE' THEN 

DELETE FROM visibility_matrix where companyid=NEW.companyid; 
RETURN NEW; 

    END IF; 
END; 
$$ 
LANGUAGE 'plpgsql'; 

トリガー:

CREATE TRIGGER test_trigger 
AFTER UPDATE 
ON first 
FOR EACH ROW 
EXECUTE PROCEDURE pos_org_rel_refresh(); 
+0

はつまり、あなたの答えを持っていますか? –

答えて

0

別のテーブルに参加するUSING clause of DELETEを採用:

トリガ機能を:

CREATE OR REPLACE FUNCTION pos_org_rel_refresh() 
    RETURNS trigger AS 
$func$ 
-- DECLARE 
-- r int; -- not used in function body 
BEGIN 
-- IF TG_OP='UPDATE' THEN -- redundant while func is only used in AFTER UPDATE trigger 
    DELETE FROM public.visibility_matrix v 
    USING public.second s 
    WHERE s.userid = NEW.userid 
    AND v.companyid = s.companyid; 
-- END IF; 

RETURN NEW; -- and don't place this inside the IF block either way 

END 
$func$ LANGUAGE plpgsql; -- don't quote the language name 

トリガー:

CREATE TRIGGER test_trigger 
AFTER UPDATE ON first 
FOR EACH ROW EXECUTE PROCEDURE pos_org_rel_refresh(); 
関連する問題