问题标签 [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.
oracle - 为什么代码会抛出 java.sql.SQLException: ORA-01438?
我通过这个语句在表中插入数据:
目标表有这个触发器:
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+ 中做到这一点”。
postgresql - 如何在 PostgreSQL 中强制列的默认值?
除了在 INSERT/UPDATE 期间忽略查询给定值以支持默认值的触发器之外,还有其他实用方法吗?
这是我要存档的行为:
谢谢!
mysql - 行创建和最后修改的时间戳
我需要跟踪一行插入数据库的时间,以及上次修改的时间。
我尝试创建两个单独的列,并使用CURRENT_TIMESTAMP
:
但是,这产生了一个错误:
ERROR 1293 (HY000):表定义不正确;在 DEFAULT 或 ON UPDATE 子句中只能有一个带有 CURRENT_TIMESTAMP 的 TIMESTAMP 列
做这个的最好方式是什么?
我正在考虑存储过程,但正在寻找标准解决方案。我还关心访问权限——尽可能少的程序/事物应该能够触及时间戳。
虽然我更喜欢 MySQL 的答案,但也感谢其他 RDBMS 的解决方案!
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。
oracle - 在该语句的触发器内如何获取受该语句影响的行数
我有一个语句级触发器,只要在表(称为客户)上执行 INSERT UPDATE 或 DELETE 操作就会触发。我想显示一条消息(到 DBMS_OUTPUT),其中包含插入/更新/删除的行数。
我只想为每个触发语句发送一条消息,例如“4 行已插入客户表”。
如何从 INSIDE 触发器声明中访问受触发语句影响的行数,即下面代码中的 XXX:
在文档中找不到任何内容,感谢您的帮助!
mysql - 带有嵌套选择的 MySQL 触发器
我正在尝试创建一个 MySQL 触发器,该触发器在表 A 上插入后运行,并且关注多行。基本上,当我插入表 A 时,我想在表 B 中插入一行,其中包含表 C 中的每一行以及表 A 中插入的 ID。有人可以帮忙吗?
这是一般的想法 -
谢谢!
埃文
sql - SQL Server:DDL 触发器,控制表创建
我正在使用 SQL Server 2008。
我正在创建一个这样的 DDL 触发器:
我可以得到那个已经创建的表吗!?
在普通表触发器中插入或删除之类的东西?!
oracle - 在休眠中使用 oracle 自动增量触发器
我正在使用hibernate从我的java类映射到oracle表。对于我的主键 ID,我正在使用
因为我的代码需要在两台机器上运行,所以我经常遇到以下异常:
那是因为我使用的是休眠的增量,它会再次尝试内存中的最新数字。谁能展示我如何在休眠中使用oracle的auto_increment?我直接在数据库中添加触发器,但是当它尝试调用 saveOrUpdate 时休眠崩溃:
非常感谢你!!!!!!!!!
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'
因为那是新数据。