gpt4 book ai didi

oracle - 我可以暂时禁用 oracle 存储过程中的触发器吗?

转载 作者:行者123 更新时间:2023-12-04 10:29:16 32 4
gpt4 key购买 nike

我可以暂时禁用 oracle 存储过程中的触发器吗?
示例(伪代码):

MyProcedure{

disable MyTrigger;

//doStuff

enable MyTrigger;

};

最佳答案

您可以使用 EXECUTE IMMEDIATE 语法通过动态 SQL 发出 DDL,例如“ALTER TRIGGER”语句。

对此的描述在这里:
http://download.oracle.com/docs/cd/B12037_01/appdev.101/b10807/13_elems017.htm

PROCEDURE myProcedure
IS
BEGIN
EXECUTE IMMEDIATE 'ALTER TRIGGER triggername DISABLE';

-- Do work

EXECUTE IMMEDIATE 'ALTER TRIGGER triggername ENABLE';
EXCEPTION
WHEN OTHERS
THEN
-- Handle Exceptions
END myProcedure;

如果您愿意,也可以使用 VARCHAR 变量构建动态 SQL:
PROCEDURE myProcedure
IS
v_triggername VARCHAR2(30) := 'triggername';
BEGIN
EXECUTE IMMEDIATE 'ALTER TRIGGER '||v_triggername||' DISABLE';

-- Do work

EXECUTE IMMEDIATE 'ALTER TRIGGER '||v_triggername||' ENABLE';
EXCEPTION
WHEN OTHERS
THEN
-- Handle Exceptions
END myProcedure;

如果您这样做,那么您还应该查看包 DBMS_ASSERT 以包装触发器名称并帮助强化您的代码以抵御 SQL 注入(inject)攻击。

关于oracle - 我可以暂时禁用 oracle 存储过程中的触发器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7332058/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com