- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个存储事件的表。
但是,按照系统的设计方式,事件通常是成批记录的。我的意思是,通常会一起记录一组事件(大约 10 个),而不是单个事件。
我们可以假设:在事件表中有一列名为“batch_no”,因此我们知道哪些事件属于哪个批号。
问题:我想做的是在每次一批事件完成加载到表中时执行一个触发函数。然而,问题是我想不出触发器如何知道这一点,而不只是为 every 行调用函数。
我一直在考虑的解决方案包括:(a) 为每一行定义一个触发器; (b) 在计算计数的条件下(select * from events, where NEW.batchNO = events.batchNO);耽误一些时间;再次计算相同的计数,如果它们相等,我们就知道该批处理已完成加载,我们调用触发器。
虽然,上面的解决方案显然听起来很复杂?有更好或更简单的解决方案吗? (或者,如果没有,对我如何实现我所描述的内容有什么帮助吗?)
最佳答案
您可以将参数传递给触发器函数,但只能在 CREATE TRIGGER
语句中,这有助于为多个触发器使用相同的触发器函数,但 不会帮助您解决问题。
您需要触发器在创建触发器时未知的条件下触发。我基本上看到了三种可能性:
使用 FOR EACH STATEMENT
子句。 The manual:
A trigger that is marked
FOR EACH ROW
is called once for every rowthat the operation modifies. For example, aDELETE
that affects 10rows will cause anyON DELETE
triggers on the target relation to becalled 10 separate times, once for each deleted row. In contrast, atrigger that is markedFOR EACH STATEMENT
only executes once for anygiven operation, regardless of how many rows it modifies (inparticular, an operation that modifies zero rows will still result inthe execution of any applicableFOR EACH STATEMENT
triggers).
仅当您使用单个 INSERT
命令(多行)插入所有批处理时才适用,但一次不超过一个批处理。
WHEN
行级触发器的条件。使用 FOR EACH ROW
子句加上 WHEN
条件。为此,您需要 9.0+ 版本。
如果您可以从单个插入的行(这是一批中的最后一行)中分辨出来,那么您的触发器定义可能如下所示:
CREATE TRIGGER insert_after_batch
AFTER INSERT ON tbl
FOR EACH ROW
WHEN (NEW.batch_last) -- any expression identifying the last
EXECUTE PROCEDURE trg_tbl_insert_after_batch();
这假定您的表中有一列 batch_last boolean
,您可以在其中标记批处理的最后一行。任何基于列值的表达式都是可能的。
这样触发器只会在每个批处理的最后一行触发。使它成为一个 AFTER
触发器,这样所有行都已经在表中可见,并且您可以一起查询它们以了解您想在触发器中执行的任何操作。 可能是要走的路。
这基本上是 9.0 之前版本的回退,没有 WHEN
子句。在执行负载之前在触发器内部进行相同的检查。比 2)
贵。
关于postgresql - 数据库中的触发器在 “set” 插入语句之后执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8420233/
概述 触发器是 MySQL 的数据库对象之一,不需要程序调用或手工启动,而是由事件来触发、激活,从而实现执行,包括 INSERT 语句、UPDATE 语句和 DELETE 语句 创建触发器 1. 创建
当我为单元格获得的值是某种类型时,我试图设置一个触发器来显示文本块。 我已经成功地设法在相同的情况下显示图像,但在这种情况下我不需要图像,而是一些文本。 已注释掉行以进行测试。尝试使其工作。注释掉的代
我需要在 phpmyadmin 中为 2 个表创建一个触发器。 所以有表 stores 和 tbl_storefinder_stores。 我想从 stores 表中插入 4 个东西(名称、地址、经度
阅读目录 1、触发器 2、触发器类型 3、触发器语法 4、插入数据触发器案例 5、修改数据触发器案例
SQLite 触发器(Trigger) SQLite 的触发器是数据库的回调函数,它会在指定的数据库事件发生时自动执行/调用。以下是关于SQLite的触发器的要点:SQLite **触发器(Trig
请帮我写一个向表中添加新行的触发器。 我的数据库中有 3 个表: 地区(id,名字); id - 主要; 技术人员(身份证、姓名); id - 主要; 可用性(id、区域、技术、计数); id - p
我正在编写一个触发器来审核表中的更新和删除。我正在使用 SQL Server 2008 我的问题是, 有没有办法在不经过删除和插入表的选择阶段的情况下找出对记录采取的操作? 另一个问题是,如果记录被删
我的表: TableA (id number, state number) TableB (id number, tableAId number, state number) TableC (id n
我很少写触发器。我可以帮助设置这件事。 CREATE TRIGGER audit_tableName ON dbo.tableNameAudit AFTER CREATE, UPDATE, DELET
我之前从未在 Oracle 中创建过触发器,所以我正在寻找一些方向。 如果 ID 不在插入语句中,我想创建一个将 ID 增加 1 的触发器。 ID 应该从 10000 开始,当插入一条记录时,下一个
考虑以下两个(假设的)表 温度 * day * time * lake_name * station * temperature_f 温度_总结 * day * lake_name * station
如何在 SQL 触发器中获取更新记录的值 - 如下所示: CREATE TRIGGER TR_UpdateNew ON Users AFTER UPDATE AS BEGIN S
我是 Cassandra 新手,使用 Cassandra 3.10 并有类似的表格 create table db1.table1 (id text, trip_id text, event_time
在 MSSQL 中执行 TRUNCATE(而不是删除)时如何触发触发器 最佳答案 来自msdn : TRUNCATE TABLE cannot activate a trigger because t
我正在尝试在 sql developer 中创建一个简单的触发器,以在工资发生变化时显示工资的变化 CREATE OR REPLACE TRIGGER salary_changes BEFORE DE
我有三个表: Table1: Customers (CustomerId, Name, CustomerAddress) Table2: AccountManagers(ManagerId, Name
在 Sql Server 2005 触发器中有没有办法在执行期间获取触发器附加到的表的名称和架构? 最佳答案 SELECT OBJECT_NAME(parent_id) AS [Table],
使用 MySQL 5.5,以下触发器因错误而被拒绝: create trigger nodups before insert on `category-category` for each row b
我使用 fancybox 打开一个带有表单的弹出窗口。目前,当鼠标离开主页时,弹出窗口就会出现。为了完成这项工作,我有一个隐藏的链接标签,我用trigger()函数模拟它,单击该函数,以便该链接的hr
我的触发器触发 INSERT, UPDATE and DELETE .我需要根据触发触发器的操作从适当的内存表( inserted, deleted )插入。由于只有 inserted位于 INSER
我是一名优秀的程序员,十分优秀!