使用触发器忽略插入

Posted

技术标签:

【中文标题】使用触发器忽略插入【英文标题】:Ignoring an Insert Using a Trigger 【发布时间】:2011-02-15 13:14:18 【问题描述】:

我有一个包含三个表 User(userID, Firstname, LastName)、Movies(MovieID, MovieName) 和 UserMovies(MovieID, userID) 的数据库。我在 User 表中还有一个触发器,我希望在 Insert 之后运行它来确定提供的 userID 是否已经存在。如果提供的 userID 存在于表中,我该如何忽略触发触发器并开始操作 Movies 表的插入(我的下一个 INSERT 命令)?我尝试使用 RETURN

如果存在(从插入中选择 insert.userID) 返回

但这对我不起作用。谢谢。

【问题讨论】:

【参考方案1】:

如果您想根据某些条件限制数据插入,您应该在before trigger 中进行。在这里,检查一下 user_id 是否已经存在。如果是这样,那么您可以通过回滚事务来限制将该数据插入表中。

【讨论】:

【参考方案2】:

在触发函数中引发异常。

RAISERROR ('Error Text', 11, 1);

我不知道在触发器函数中“忽略”插入的另一种方法。由于该函数是由 INSERT 命令触发的,因此 INSERT 应该发生或发生错误。

另一种方法是编写一个存储过程,在尝试插入之前检查您的情况。

【讨论】:

以上是关于使用触发器忽略插入的主要内容,如果未能解决你的问题,请参考以下文章

plsql触发器自动插入ID

在不触发发射的情况下插入 Android Room 表?

触发更新不同的表

语句后忽略When子句的Oracle复合触发器

Postgresql忽略触发器上的“何时”条件

DB2:忽略更新触发器中的列