问题标签 [triggers]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
3093 浏览

oracle - Oracle 函数并发

我目前有一个 INSERT TRIGGER,它在 Oracle 10g 中运行一个自定义函数,该函数生成一个时髦的字母数字代码,用作插入的一部分。

我真的需要确保函数(甚至触发器)是线程安全的,这样如果两个用户同时激活触发器,触发器中使用的函数不会为两个用户返回相同的代码。

触发器中的流程如下:

开始

  1. 根据业务逻辑判断是否需要继续
  2. 运行自定义函数以获取新代码
  3. 使用返回的代码作为插入到不同的表中

结尾

主要问题是,如果在第 2 步运行时,一个单独的线程触发触发器,该触发器也进入第 2 步,并返回与第一个线程相同的代码。(我知道这是一个非常紧张的情况,但我们需要处理它)。

我想到了两种主要的方法:

目前我想到的目前最好的方法是在触发器一开始就以“独占模式”锁定触发器中使用的表,并且指定锁的NOWAIT属性。这样,触发器的每个后续激活都会“停止并等待”锁可用,因此等待其他线程完成触发器。

我很想锁定表任何拒绝读取表,但我似乎可以找到如何在 Oracle 中执行此操作。

我的想法并不理想,但应该可行,但是我很想听听任何可能对此有更好想法的人!

非常感谢您提供的任何帮助。

干杯,马克

0 投票
4 回答
24371 浏览

oracle - ORA-04091: 表 [blah] 正在变异,触发器/函数可能看不到它

我最近开始研究一个大型复杂的应用程序,由于这个错误,我刚刚被分配了一个错误:

有问题的触发器看起来像

该表有一个主键“ t1_pk”、一个“约会事件 id” t1_appnt_evnt_id和另一列“ t1_prnt_t1_pk”,它可能包含也可能不包含另一行的t1_pk.

看来触发器正在尝试确保没有其他具有相同内容的人t1_appnt_evnt_id引用同一行,如果该行引用另一行,则该行引用另一行的引用。

DBA 对错误报告的评论说“删除触发器,并在代码中执行检查”,但不幸的是,他们在 Hibernate 之上有一个专有的代码生成框架,所以我什至无法弄清楚它实际上在哪里被写出来,所以我希望有办法让这个触发器工作。有没有?

0 投票
3 回答
36835 浏览

wpf - WPF - 如何为网格的鼠标悬停编写触发器?

我看到 Button 对象有一个 IsMouseOVer 属性。

但是如何为没有 IsMouseOver 的网格或其他元素的鼠标悬停创建效果?

谢谢马尔科姆

编辑:我想通了。我使用了错误的方法来设置触发器。

0 投票
12 回答
194659 浏览

sql-server - SQL Server“AFTER INSERT”触发器看不到刚刚插入的行

考虑这个触发器:

我有一个表 someTable,我试图阻止人们插入不良记录。就本问题而言,不良记录具有一个全为数字的字段“someField”。

当然,这样做的正确方法不是使用触发器,但我不控制源代码......只是 SQL 数据库。所以我不能真正阻止坏行的插入,但我可以马上删除它,这已经足够满足我的需要了。

触发器工作,有一个问题......当它触发时,它似乎永远不会删除刚刚插入的坏记录......它会删除任何旧的坏记录,但它不会删除刚刚插入的坏记录。所以经常有一个坏记录漂浮在周围,直到其他人出现并执行另一个 INSERT 时才会删除。

这是我对触发器的理解的问题吗?触发器运行时新插入的行是否尚未提交?

0 投票
1 回答
25246 浏览

sql - 为另一个模式中的表创建触发器时权限不足

当我尝试在模式 A 中为模式 B 中的表创建触发器时,我收到一个 ora 错误:权限不足。

我需要什么特权?

0 投票
1 回答
7747 浏览

mysql - 用于维护审计日志的 BEFORE 或 AFTER 触发器

我一直在阅读创建触发器页面上的 MySql 5.0 评论流 ,我想问问社区这些建议是否很好以及它们是否仍然适用于 5.1。我今天注意到使用触发器是不可能使用 AFTER UPDATE 来更新旧表中的字段。

  1. 小心使用 BEFORE 触发器。可能会出现约束,特别是如果您使用 InnoDB 引擎,插入将失败,但来自 BEFORE 触发器的操作将成功。
  2. 将 BEFORE 触发器主要用于约束或规则,而不是事务,调整 NEW.* 列应该没问题。
  3. 对大多数其他操作坚持使用 AFTER 触发器,例如插入历史表或更新非规范化。
0 投票
2 回答
11893 浏览

wpf - WPF调试数据触发器?

我正在尝试做一些非常简单的事情。我有一个绑定到布尔的 ToggleButton.IsChecked 属性。我希望背景在红色(假)和绿色(真)之间切换。但由于某种原因,它似乎在红色和无背景之间切换。我使用了一个转换器来检查我是否从源获得了正确的通知并且我是,所以不确定为什么一个触发器(假/红色)有效而另一个(真/绿色)没有。也想听听人们如何调试这些问题。谢谢!

这是代码。

更新:我将切换按钮更改为复选框,它可以工作。不知道为什么...

0 投票
10 回答
588 浏览

sql - 在 SQL 中维护 LastUpdatedDate 列的最佳方法是什么?

假设我有一个数据库表,其中包含上次更新或插入的时间日期列。哪个更可取:

  1. 让触发器更新字段。
  2. 让执行插入/更新的程序设置该字段。

第一个选项似乎是最简单的,因为我什至不必重新编译即可,但这并不是什么大不了的事。除此之外,我很难想出任何理由去做一个而不是另一个。有什么建议么?

0 投票
6 回答
569 浏览

triggers - 最后更新日期:反模式?

我不断看到问题浮出水面,这些问题引用了数据库表中名为 DateLastUpdated 之类的列。我不明白。

我见过的唯一伴随字段是 LastUpdateUserId 之类的。从来没有迹象表明为什么会发生更新;甚至更新是什么。

最重要的是,该字段有时是从触发器中写入的,其中可用的上下文更少。

当然,它甚至远不及审计线索。所以这不能成为理由。如果在日志或其他任何地方有审计线索,这个字段将是多余的。

我错过了什么?为什么这种模式如此受欢迎?

0 投票
6 回答
4892 浏览

sql - SQL CLR 触发器可以做到这一点吗?或者,还有更好的方法?

我想编写一个监视数据库表的服务(可能在 c# 中)。当一条记录插入到表中时,我希望服务获取新插入的数据,并用它执行一些复杂的业务逻辑(对于 TSQL 来说太复杂了)。

一种选择是让服务定期检查表以查看是否已插入新记录。这样做的问题是我希望服务在插入发生时立即知道插入,并且我不想破坏数据库性能。

做一些研究,似乎写一个 CLR 触发器可以完成这项工作。我可以在 c# 中编写在插入发生时触发的触发器,然后将新插入的数据发送到 Windows 或 WCF 服务。

您认为 SQL CLR 触发器的使用是否良好(甚至可能)?

关于如何实现这一点的任何其他想法?