我要丢失ORACLE中的现有触发器。只有在DROP触发器存在的情况下(ORACLE)
我知道drop
查询触发器oracle。但想知道如何检查该触发器是否已存在于Oracle DB中。
DROP查询:
DROP TRIGGER **TRIGGER_NAME**
我要丢失ORACLE中的现有触发器。只有在DROP触发器存在的情况下(ORACLE)
我知道drop
查询触发器oracle。但想知道如何检查该触发器是否已存在于Oracle DB中。
DROP查询:
DROP TRIGGER **TRIGGER_NAME**
你有两个选择:
1)检查触发存在
SELECT *
FROM user_triggers
WHERE trigger_name = '...'
2)跌落触发和检查异常
我的机器上没有安装ORACLE DB。所以原谅我这个蹩脚的问题。我想知道,如果从代码端执行查询{DROP TRIGGER TRIGGER_NAME},它会抛出错误而不处理任何异常?所有我需要做的就是放弃扳机。我需要为此添加例外吗? –
如果触发器不存在并且您放弃它,则会出现异常。因此,您只需要混淆异常,导致'无论如何丢弃触发':创建或替换触发器my_trg 之前为每行插入tmp 开始 null; 结束; BEGIN - 触发器仍然存在 立即执行'DROP TRIGGER my_trg'; - 不再触发,异常提出 立即执行'DROP TRIGGER my_trg'; EXCEPTION 何时其他 NULL; END; – hinotf
您需要一个具有动态SQL的PL/SQL块:
-- drop the trigger if it exists
declare
l_count integer;
begin
select count(*)
into l_count
from user_triggers
where trigger_name = 'TRIGGER_NAME';
if l_count > 0 then
execute immediate 'drop trigger trigger_name';
end if;
end;
/
-- now create the trigger
create trigger trigger_name
..
begin
end;
/
注意(无引号)标识符被存储在上壳体在Oracle系统目录。因此,请确保在PL/SQL检查中使用trigger_name = 'TRIGGER_NAME'
而不是trigger_name = 'trigger_name'
这是什么原因?您不能执行查询,如果它不存在则会抛出一个错误。如果它存在,它将被丢弃。 – brenners1302
您可以根据您的特权查询'[user | all | dba] _triggers',无论您是否以触发器的所有者身份登录等。或者您可以简单地删除触发器并捕获异常。 –
我是一个** delphi **开发人员,我从代码创建了这个** DROP **查询。所以这是我用** oracle query **来检查它的原因。 –