如何创建数据库触发器以将行更改记录到H2中的另一个表?
在MySQL中,这可以轻松完成:
CREATE TRIGGER `trigger` BEFORE UPDATE ON `table`
FOR EACH ROW BEGIN
INSERT INTO `log`
(
`field1`
`field2`,
...
)
VALUES
(
NEW.`field1`,
NEW.`field2`,
...
) ;
END;
声明此触发器:
CREATE TRIGGER my_trigger
BEFORE UPDATE
ON my_table
FOR EACH ROW
CALL "com.example.MyTrigger"
public class MyTrigger implements Trigger {
@Override
public void init(Connection conn, String schemaName,
String triggerName, String tableName, boolean before, int type)
throws SQLException {}
@Override
public void fire(Connection conn, Object[] oldRow, Object[] newRow)
throws SQLException {
try (PreparedStatement stmt = conn.prepareStatement(
"INSERT INTO log (field1, field2, ...) " +
"VALUES (?, ?, ...)")
) {
stmt.setObject(1, newRow[0]);
stmt.setObject(2, newRow[1]);
...
stmt.executeUpdate();
}
}
@Override
public void close() throws SQLException {}
@Override
public void remove() throws SQLException {}
}
由于您在问题中添加了jOOQ标记,因此我怀疑这种替代方法也可能是相关的。您当然可以在H2触发器内使用jOOQ:
@Override
public void fire(Connection conn, Object[] oldRow, Object[] newRow)
throws SQLException {
DSL.using(conn)
.insertInto(LOG, LOG.FIELD1, LOG.FIELD2, ...)
.values(LOG.FIELD1.getDataType().convert(newRow[0]),
LOG.FIELD2.getDataType().convert(newRow[1]), ...)
.execute();
}
问题内容: 我正在寻找一种记录SQL Server 2005数据库中一组特定表上发生的更改的好方法。我相信,做到这一点的最佳方法是通过对更新和删除执行触发器。无论如何,有没有要抓住正在运行的实际语句?一旦有了该语句,我就可以轻松地将其记录在其他地方(其他数据库表)。但是,我还没有找到一种简单的方法(如果可能)来获取正在运行的SQL语句。 问题答案: 触发器不好,我会远离触发器。 如果您尝试对某些问
问题内容: 我有两个桌子和。我需要一些行插入从,它被插入之后。我知道这个问题,但我无法解决。请帮忙。 我为触发器编写了以下代码: 现在,当我插入行时,将添加到,但不添加到。它引发以下错误: _消息515,级别16,状态2,过程trigger_UpdateItemDetails,行11 无法将值NULL插入表’dbStockHandling.dbo.tbl_ItemDetails’的列’Purcha
我正在使用基于Laravel的OctoberCMS。 我使用的服务器与Debian,PHP7,PHP-FPM和APCu。 我已安装NTP并将服务器时间设置为UTC。 在我已经设置了日期。时区=“UTC”。 我有一个画廊,你可以上传文件。 它将记录保存到数据库,并设置上传到列的时间。 使用在日期/时间创建的
问题内容: 我在不同的主机上有2个mysql数据库,想在将数据插入到另一个数据库后将触发器插入到另一个数据库中。我是mysql的新手,在sql server中我可以创建链接服务器并完成它。但是如何在mysql中做呢?两个数据库都有相似的表 问题答案: 为了能够继续进行此操作,必须首先确保两个服务器具有相同的配置。为了完成您想做的事情,可以在两个服务器上结合使用FEDERATED存储引擎和触发器,以
问题内容: 我有一个与MySQL数据库的Java程序连接,如何在同一连接上将当前数据库更改为另一个数据库? 我这样连接到MySQL: 经过一些操作后,我想在同一连接上连接到另一个mysql数据库。我怎样才能做到这一点? 我尝试使用: 但这不会更改要使用的数据库。 问题答案: 如MySQL文档中所述,您需要用于切换到另一个数据库。这也明确地说,你应该 不 执行切换。 发出此警告的原因是JDBC是数据
我在另一个表(如ac)中有大约88k条记录。我想将表ac的一列更新到主表(如tbl)中。Eg-Table tbl示例记录,如 col1 col2 col3 col4 表ac中的样本记录如下 col1 col3` 如何从ac表更新tbl值。使记录看起来像 col1 col2 col3 col4