2

我正在开发的一些软件使用 Oracle 中的触发器。我们有一整套当前在数据库中创建和禁用。当运行 CREATE 或 REPLACE 来修改已经存在的触发器时,该触发器会自动启用。我知道 CREATE 会自动启用某些东西,但是为什么要替换呢?

然而,奇怪的是,这只发生在我们的一个数据库上,其他的都很好。数据库中是否有可能导致这种情况的设置或正在启用 REPLACE 的预期行为?

4

2 回答 2

1

我认为该OR REPLACE子句被认为是命令的修饰符,CREATE而不是命令本身。CREATE TRIGGER命令就是为此而设计的:

使用 CREATE TRIGGER 语句创建和启用数据库触发器 [...]
创建触发器时,数据库会自动启用它。随后可以使用 ALTER TRIGGER 或 ALTER TABLE 语句的 DISABLE 和 ENABLE 子句禁用和启用触发器。

于 2012-12-20T12:37:56.130 回答
0

启用和禁用触发器对于应用程序来说不是“正常”的事情,因此您可能会被这个软件误导。通常,如果您创建的一段代码具有有效的语法并且可以编译,那么它将在创建时启用。“create or replce”只是一种方便,可以先修改代码项而不删除它(并可能导致不良的副作用,例如删除它的特权)。在编译方面它与 create 没有什么不同。

现在您可以做的是“创建或替换触发器...禁用时...”,这当然会将其创建为禁用。

于 2012-12-20T12:37:21.217 回答