在oracle中,我可以指定列,这将引发触发器的触发:
create or replace trigger my_trigger
before update of col1, col2, col3 on my_table for each row
begin
// the trigger code will be executed only if col1 or col2 or col3 was updated
end;
现在,我想执行以下操作:当 只 更新 一 列时,我不希望触发触发器。这怎么可能?
我可以列出除那一列之外的所有列,该列不应引起触发器的触发。对于具有许多列的表而言,这非常麻烦。
另一种方法是使用像这样的UPDATING函数:
if not updating('COL3') then ...
但是,如果我立即更改了COL1 和 COL3,则该语句的计算结果为false。那不是我想要的,因为我只想更新 一 列(COL3)时限制执行。
您可以执行以下操作:
create or replace trigger my_trigger
before update on my_table
for each row
declare
n_cols integer := 0;
begin
for r in (select column_name from all_tab_columns
where table_name = 'MY_TABLE'
and owner = 'MY_SCHEMA')
loop
if updating(r.column_name) then
n_cols := n_cols + 1;
exit when n_cols > 1;
end if;
end loop;
if n_cols > 1 then
do_something;
end if;
end;
可能不是很有效!
触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行。 因此触发器不需要人为的去调用,也不能调用。触发器的触发条件其实在定义的时候就已经设定好了。这里面需要说明一下,触发器可以分为语句级触发器和行级触发器。 触发器的基础知识和示例: Oracle之前插入触发器 - https://www.xnip.cn/oracle/before_insert.html Oracle之后插
问题内容: 我有一个表,该表的索引自动由使用序列的触发器填充(Oracle数据库) 我有一个匹配的Java类: 当我尝试持久保存A的实例时,如下所示: 我得到这个问题: 保存调用返回的代码中的ID = “ X” 数据库中的ID = “ X + 1” 有没有一种方法可以设置Hibernate来让数据库触发器创建ID? 谢谢 问题答案: HIbernate问题上发现的与Oracle触发器有关的响应,用
问题内容: 我正在尝试为我的表创建一个触发器,该触发器根据某个标志设置为“ Y”的时间自动添加发布日期 我没有创建触发器的丰富经验,但到目前为止,这是我所拥有的 更新列时出现此错误 触发器“ USER.ADD_CREATE_DT”无效且重新验证失败 有任何想法吗? 谢谢 问题答案: 使用WHEN子句: 或使用IF: 在这种情况下,WHEN更合适,更有效。
问题内容: 我有一个触发器,我正尝试使用它来更新它侦听的同一张表。 但是,提交创建或更新后,出现以下错误: 感谢您的帮助! 问题答案: 您正在更新触发器已写入的同一表。您需要这样的东西:
问题内容: 我正在尝试编写触发器,我有下表:BookingRequest: 状态表: 被占领的房间: 我需要一个触发器,如果将具有相同ID的请求插入到OccupiedRoom表中,它将把BookingReques中的状态更改为1,所以我尝试了类似的操作 而且它不起作用,所以任何建议都非常有用 问题答案: 尝试这个:
userNotesTable: 用户提醒表: 插入触发器: 更新触发器: 这是数据库的当前代码,以及提醒表的特定触发器。我遇到的困难是,从提醒表中的specific中的user notes表中选择特定的名称和额外的内容,所有这些都在更新触发器中。 插入时,和会被插入到提醒和搜索表中,但我希望能够使用特定名称和用户注释表中的额外内容更新搜索表,这可能吗?