我可以暂时禁用oracle存储过程中的触发器吗?
示例(伪代码):
MyProcedure{ disable MyTrigger; //doStuff enable MyTrigger; };
thx提前.
朱塞佩
您可以使用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来包装triggername并帮助强化你的代码以防止SQL注入攻击.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。