问题标签 [database-trigger]

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 投票
1 回答
1288 浏览

oracle - 为什么代码会抛出 java.sql.SQLException: ORA-01438?

我通过这个语句在表中插入数据:

目标表有这个触发器:

0 投票
1 回答
2914 浏览

oracle - Oracle AFTER/BEFORE CREATE ON DATABASE 触发器:如何访问对象源

我正在尝试为 Oracle 实现伪版本控制和存储库。这个想法是:当存储的函数/过程被更改或创建的全局数据库触发器被触发时,它将获取修改对象的当前源并将它们存储到表中。所以我使用了两个触发器:

一切正常,除了 AFTER_MODIFY 触发器看到编译对象的旧版本(源)。我试图从相同的结果中获取资源SYS.SOURCE$.SOURCE并作为第二次尝试。dbms_metadata.get_ddl(OBJ_TYPE, OBJ_NAME, OBJ_OWNER)

我正在寻找建议或明确的答案,例如“您无法在 Oracle 10g+ 中做到这一点”。

0 投票
3 回答
1906 浏览

postgresql - 如何在 PostgreSQL 中强制列的默认值?

除了在 INSERT/UPDATE 期间忽略查询给定值以支持默认值的触发器之外,还有其他实用方法吗?

这是我要存档的行为:

谢谢!

0 投票
2 回答
10486 浏览

mysql - 行创建和最后修改的时间戳

我需要跟踪一行插入数据库的时间,以及上次修改的时间。

我尝试创建两个单独的列,并使用CURRENT_TIMESTAMP

但是,这产生了一个错误:

ERROR 1293 (HY000):表定义不正确;在 DEFAULT 或 ON UPDATE 子句中只能有一个带有 CURRENT_TIMESTAMP 的 TIMESTAMP 列

做这个的最好方式是什么?

我正在考虑存储过程,但正在寻找标准解决方案。我还关心访问权限——尽可能少的程序/事物应该能够触及时间戳。


虽然我更喜欢 MySQL 的答案,但也感谢其他 RDBMS 的解决方案!

0 投票
2 回答
4975 浏览

entity-framework-4.1 - 无法将 StoreGeneratedPattern.Identity 与数据库触发器生成的主键值一起使用?

这个问题与我在这里提出的另一个问题(Entity Framework 4.2 - How to implement TPT-Inheritance with Database-generated Primarykey Value?)有关,并且应该简单地澄清一下,如果我对主题中所述问题的假设正确与否.

问题(详细):

  • 我想使用 EF (4.1) 访问一个已经存在的数据库
  • 数据库对其表的主键值的生成有一些限制(有一个 UDF,它采用表名并返回下一个可用 ID)
  • 为了让我自己尽可能简单,我的第一种方法是定义数据库触发器(在插入之前),它调用 ID 生成 UDF 以在插入新数据行时设置新 ID
  • 然后我将我的 EDM 的 csdl 中相应实体的 StoreGeneratedPattern 属性设置为“Identity”,以便在将新生成的 ID 保存到数据库后将它们设置在实体对象中

结果是:

当我创建一个新的实体对象,将其添加到 DbContext 并在其上调用 SaveChanges 时,相应的数据行被插入到数据库中,但实体没有使用新的数据库生成的 ID 进行更新。当我尝试一次保存更多时,我意识到了这一点,它们之间存在关联(父子实体),因为子实体的外键属性无法正确设置,因为父实体的新 ID 未知数据库上下文。

这就是我问上面提到的关于 TPT 继承的问题的原因。

经过几天的研究并尝试了我想到的一切来解决这个问题,我想我意识到,这根本行不通。尽管 MSDN 上的 StoreGeneratedPattern 枚举文档和博客中的一些解释表明,应设置 StoreGeneratedPattern.Identity 以检索生成的值,但当数据库在插入新行时生成值时,主键并不适用与数据库触发器。

在考虑了很长时间之后,这对我来说似乎是完全合乎逻辑的,因为 EF 需要一些标准来检索数据库生成的值,我认为在大多数情况下这将是实体的身份。对于设置为自动增量(或标识列,...)的数据库列,这可能没有问题,因为 DBMS 提供了一些功能来检索最后插入的标识值(例如 MSSQL 中的@@identity)。但是,当使用触发器生成新的标识值时,EF 显然不知道如何查询新插入的行(而且我也无法想象任何好的独立于数据库的方式来执行此操作)。

所以我的实际问题是:上面的假设是正确的还是我在这里忽略了一些重要的东西?

提前感谢您对此的任何澄清/启发。

编辑(后续问题):

在阅读了 Ladislav 的回答后,出现了另一个问题:

如果我在 CSDL 中设置 StoreGeneratedPattern,我是否必须在 SSDL 中将其设置为相同的值(反之亦然)?edm 设计器的补丁暗示了这种情况,因为当您在 CSDL 中更改 StoreGeneratedPattern(通过设计器)时,它会自动同步 SSDL 中的 StoreGeneratedPattern。

0 投票
2 回答
9594 浏览

oracle - 在该语句的触发器内如何获取受该语句影响的行数

我有一个语句级触发器,只要在表(称为客户)上执行 INSERT UPDATE 或 DELETE 操作就会触发。我想显示一条消息(到 DBMS_OUTPUT),其中包含插入/更新/删除的行数。

我只想为每个触发语句发送一条消息,例如“4 行已插入客户表”。

如何从 INSIDE 触发器声明中访问受触发语句影响的行数,即下面代码中的 XXX:

在文档中找不到任何内容,感谢您的帮助!

0 投票
1 回答
1816 浏览

mysql - 带有嵌套选择的 MySQL 触发器

我正在尝试创建一个 MySQL 触发器,该触发器在表 A 上插入后运行,并且关注多行。基本上,当我插入表 A 时,我想在表 B 中插入一行,其中包含表 C 中的每一行以及表 A 中插入的 ID。有人可以帮忙吗?

这是一般的想法 -

谢谢!

埃文

0 投票
2 回答
3839 浏览

sql - SQL Server:DDL 触发器,控制表创建

我正在使用 SQL Server 2008。

我正在创建一个这样的 DDL 触发器:

我可以得到那个已经创建的表吗!?

在普通表触发器中插入或删除之类的东西?!

0 投票
2 回答
4362 浏览

oracle - 在休眠中使用 oracle 自动增量触发器

我正在使用hibernate从我的java类映射到oracle表。对于我的主键 ID,我正在使用

因为我的代码需要在两台机器上运行,所以我经常遇到以下异常:

那是因为我使用的是休眠的增量,它会再次尝试内存中的最新数字。谁能展示我如何在休眠中使用oracle的auto_increment?我直接在数据库中添加触发器,但是当它尝试调用 saveOrUpdate 时休眠崩溃:

非常感谢你!!!!!!!!!

0 投票
1 回答
2528 浏览

database - 触发插入旧值

我的表上有以下触发器,我面临的问题是在my_hist表中当条件变为时插入新旧值updated = 'Y'

当条件变为updated = 'Y'.

谢谢

更新 1

如果我正在更新updated = 'Y',那么如果我有记录

id = 3, start_date='01-Jan-2014' and end_date='31-Jan-2014' 和更新的数据 id = 3, start_date=='01-Jan-2014' and end_date='31-Mar-2014'然后我将在 my_hist 表中有两条记录

理想情况下,我应该只id = 3 and start_date='01-Jan-2014' and end_date='31-Jan-2014'在 my_hist 表中,而不是第二行,end_date='31-Mar-2014'因为那是新数据。