2016-09-14 86 views
0

您好有人可以告诉我什么,我搞乱了,我得到的错误。当在第一个SELECT子句中,这里是我的代码,我已经写了我对它进行更新:动态SQL查询文本

CREATE OR REPLACE FUNCTION get_all_results() RETURNS VOID AS 
    $BODY$ 
    DECLARE 
    r RECORD; 
    BEGIN 


    FOR r IN (SELECT 'CREATE TRIGGER ' || tab_name|| '_if_modified_trg AFTER INSERT OR UPDATE OR DELETE ON ' || tab_name|| ' FOR EACH ROW WHEN (session_user <> ''source1'' OR (session_user = ''source1'' AND '|| tab_name ||' IN (SELECT*FROM table_names))) 
    EXECUTE PROCEDURE audit.if_modified_func(); ' 
     AS trigger_creation_query 
    FROM (
    SELECT table_name as tab_name 
    FROM information_schema.tables 
    WHERE table_schema='public' 
    AND table_type != 'VIEW' 

    ) AS foo WHERE tab_name||'_if_modified_trg' NOT IN (SELECT tgname from pg_trigger where not tgisinternal)) 


LOOP 


    EXECUTE r.trigger_creation_query; 


END LOOP; 


END 
$BODY$ 

LANGUAGE plpgsql; 
SELECT * FROM get_all_results(); 
+0

你到那儿会发生什么错误?该循环适用于我,但“CREATE TRIGGER”语句在语法上看起来不正确。 –

+0

@LaurenzAlbe我已经更新了代码,现在我得到的错误是:无法在触发器中使用子查询WHEN条件 – Joel

回答