【发布时间】:2021-06-09 05:50:18
【问题描述】:
我有 3 个触发器用于 3 个历史表和 3 个函数。 如何通过在触发器函数中使用动态表名为所有触发器创建一个函数。这样我就可以动态传递表名并相应地插入新旧记录..
示例 1 个触发器和 1 个功能代码供参考:
CREATE TABLE emp (
empname text NOT NULL,
salary integer
);
CREATE TABLE emp_audit(
operation char(1) NOT NULL,
stamp timestamp NOT NULL,
userid text NOT NULL,
empname text NOT NULL,
salary integer
);
CREATE OR REPLACE FUNCTION process_emp_audit() RETURNS TRIGGER AS $emp_audit$
BEGIN
--
-- Create a row in emp_audit to reflect the operation performed on emp,
-- making use of the special variable TG_OP to work out the operation.
--
IF (TG_OP = 'DELETE') THEN
INSERT INTO emp_audit SELECT 'D', now(), user, OLD.*;
ELSIF (TG_OP = 'UPDATE') THEN
INSERT INTO emp_audit SELECT 'U', now(), user, NEW.*;
ELSIF (TG_OP = 'INSERT') THEN
INSERT INTO emp_audit SELECT 'I', now(), user, NEW.*;
END IF;
RETURN NULL; -- result is ignored since this is an AFTER trigger
END;
$emp_audit$ LANGUAGE plpgsql;
CREATE TRIGGER emp_audit`enter code here`
AFTER INSERT OR UPDATE OR DELETE ON emp
FOR EACH ROW EXECUTE FUNCTION process_emp_audit();
我想使用从静态历史表到动态表,以便我可以为所有 3 个触发器使用一个函数。如何动态更改下面的插入语句。
INSERT INTO emp_audit SELECT 'D', now(), user, OLD.*;
INSERT INTO emp_audit SELECT 'U', now(), user, NEW.*;
INSERT INTO emp_audit SELECT 'I', now(), user, NEW.*;
【问题讨论】:
-
那你需要使用dynamic SQL
-
如何在下面的插入语句中使用动态sql。以便为 3 个历史记录表上的所有 3 个触发器提供一个函数。
-
如何使用动态 sql 插入动态历史表,以便我可以将 dml 记录存储到 hsitory 表中..我有 3 个历史表和 3 个函数。想要 3 个触发器有 1 个功能,并且应该在插入语句中使用动态 hsitory 表
标签: postgresql triggers dynamic-sql