Questions tagged «trigger»

响应数据库事件自动执行过程代码。

1
仅给出字段名称,如何访问NEW或OLD字段?
我正在写一个验证触发器。触发器必须验证数组的总和等于另一个字段。由于我有很多这种验证的实例,因此我想编写一个过程并创建多个触发器,每个触发器都有一组不同的要检查的字段。 例如,我具有以下架构: CREATE TABLE daily_reports( start_on date , show_id uuid , primary key(start_on, show_id) -- _graph are hourly values, while _count is total for the report , impressions_count bigint not null , impressions_graph bigint[] not null -- interactions_count, interactions_graph -- twitter_interactions_count, twitter_interactions_graph ); 验证必须确认impressions_count = sum(impressions_graph)。 我被卡住是因为我不知道如何NEW从plpgsql中动态访问字段: CREATE FUNCTION validate_sum_of_array_equals_other() …

3
MySQL可能创建全局例程(存储过程和/或函数)
是否可以以某种方式定义全局可用的例程?似乎每个例程都必须在数据库范围内创建。 当我尝试从控制台创建例程(没有发出之前use dbname)时,出现错误: ERROR 1046 (3D000): No database selected 我们有大量相同的数据库(数据不同),目标是为某些表名创建一些触发器。但是我们只想运行一个例程,所以我们不必为每个数据库都创建这些例程(由于它们是相同的,因此例程对于每个数据库都将起作用)。

3
使用共享登录名时,如何知道用户对审核表执行删除操作?
背景资料: 我正在创建审核表的集合,以跟踪对我的应用程序的一组数据表的更新和删除。 审计记录是通过触发器创建的。 我的应用程序数据库中的DML通常来自服务用于进入数据库的登录名。因此,我认为SYSTEM_USER在触发器中调用时,结果始终是相同的。 我的应用程序当前不存储用户数据,尽管UserId每次执行DML时都会为其分配一个字符串(仅在存储过程中完成)。 我遇到的问题是,当用户删除记录时,我想知道是谁做的。因为它将通过相同的登录完成,所以我不想看到所有操作都是由服务完成的,所以我想看看哪个用户做了。这不是更新的问题,因为我们有一些ModifiedBy列会通过发送更新来UserId更新。 问题是:SYSTEM_USER运行删除操作时,有没有办法将用户信息设置为或以其他方式使用户信息进入触发器? 我现在拥有的“最佳”想法(尽管我不确定这是否是一个好主意)是,在服务中,我检查是否当前UserId作为用户存在于数据库中,如果不是,则创建一个用户为他们反对。然后使用运行存储过程EXECUTE AS User = @UserId。然后,当在存储过程中完成DML并触发触发器时,SYSTEM_USER应从中返回用户EXECUTE AS。

1
ON SCHEMA和ON DATABASE触发器有什么区别?
我们可以在具体架构事件(ON SCOTT.SCHEMA)或所有架构(ON SCHEMA)上创建数据库触发器。但是,在创建数据库触发器时,我们也可以使用ON DATABASE。它们之间有什么区别?这是一些旧的东西吗?使用AFTER STARTUP或AFTER STARTUP时应使用ON DATABASE,因为它肯定只与数据库有关,但是使用ON SCHEMA可能会完成与使用ON SCHEMA相同的工作,所以有什么区别?我在Oracle文档中找不到与此相关的参考。
8 oracle  trigger 

3
明智地使用触发器来更新另一个表吗?
我有一个Object表,该表是从另一个数据库的集成服务(可以根据需要更改的表)填充的。在某些时候,我们需要手动在另一个表中添加帖子,ObjectObjectGroup (ObjectId, ObjectGroupId)如果帖子中Object.ObjectType有某个整数值,则需要添加。由于集成服务无法处理这种更新,因此我正在考虑向Object表添加一个触发器,该触发器用伪代码如下: if Object.ObjectType = 10 begin if Object.ObjectNumber like '<string pattern>' begin insert into ObjectObjectGroup values... end end 这是明智的设置,还是在性能方面有更好的方法?

3
使用MySQL触发器或事务?
我想问一下您在网站上使用MySQL触发器或事务的意见。 实际上,我有一个payment带有- 的历史记录表UserId | OperationId | Comment | Credits | Sign (debit or credit)。因此,每个付款操作都会插入此表中。 但是,计算用户每次执行操作时的总信用额度将非常耗时。因此,我认为将每个用户的总信用额保留在用户profile表中可能是一个好主意。 这是问题所在。如何确定表格中的总贷方金额profile与payment历史记录表格中的操作保持同步? 我认为使用2种方法: MySQL触发器或 源代码中编码的交易 哪个更可靠?如果我有大型数据库(超过100.000个用户)怎么办? 您对此有何建议? BD MySQL引擎是InnoDB。

3
如何在表级别记录Access中的数据更改?
我支持非营利组织的Access数据库。我们遇到了一些数据神秘变化的问题,关于它是由不是最懂计算机的用户还是我的某些后台处理引起的,引起了一些友好的辩论。 我为这些情况在UI级别上添加了一些检查,但是我想在数据库表级别上进行一些检查,以记录更改某些字段时的情况。通过这种方式,我将知道该更改是由用户启动还是仅由后台运行的更新查询启动。通常,我会使用on update触发器,但据我所知Access不支持触发器。Access中是否还有其他可用的日志记录或类似触发器的功能?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.