Вы можете выдавать DDL, такие как операторы ALTER TRIGGER, через динамический SQL, используя синтаксис EXECUTE IMMEDIATE.
Описание этого здесь: 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;
Вы можетепостройте динамический SQL, используя переменную VARCHAR, если вам нравится:
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.