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();
你到那儿会发生什么错误?该循环适用于我,但“CREATE TRIGGER”语句在语法上看起来不正确。 –
@LaurenzAlbe我已经更新了代码,现在我得到的错误是:无法在触发器中使用子查询WHEN条件 – Joel