注册

postgres函数生成触发器转达梦sql(触发器的表名如何通过参数插入创建触发器sql)

强大的资哥哥 2022/10/11 704 1

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: dm8
【操作系统】:centsos7
【CPU】:
【问题描述】*:
我们有一个自定义函数
CREATE OR REPLACE FUNCTION diesel_manage_updated_at(_tbl regclass) RETURNS VOID AS $$
BEGIN
EXECUTE format(‘CREATE TRIGGER set_updated_at BEFORE UPDATE ON %s FOR EACH ROW EXECUTE PROCEDURE diesel_set_updated_at()’, _tbl);
END;
$$ LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION diesel_set_updated_at() RETURNS tragger AS $$
BEGIN
IF (
NEW IS DISTINCT FROM OLD AND
NEW.updated_at IS NOT DISTINCT FROM OLD.updated_at
) THEN
NEW.updated_at := current_timestamp;
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;

需求是需要转换成达梦语法的触发器
我尝试写成:
CREATE OR REPLACE FUNCTION diesel_manage_updated_at(_tbl VARCHAR(50))
RETURN int
AS
v_sex int;
BEGIN
execute immediate 'CREATE TRIGGER SET_ZICHENCHEN_UPDATE BEFORE UPDATE ON '|| _tbl ||
’ FOR EACH ROW EXECUTE PROCEDURE ZICHENCHEN_UPDATE_TEST ';
v_sex := 1;
RETURN v_sex;
END;

CREATE OR REPLACE FUNCTION ZICHENCHEN_UPDATE_TEST(test int DEFAULT NULL)
RETURN int
AS
BEGIN
:new.UPDATE_AT := current_timestamp;
RETURN 1;
END;

但是在使用
SELECT SYSDBA.diesel_manage_updated_at(‘REQUEST_TEST’);
进行调用时会发生报错。
有办法把触发器的表名通过参数插入创建触发器sql吗或者有其他更好的方式来转换吗

回答 0
暂无回答
扫一扫
联系客服