标签: trigger

同一表上的更新前后触发器

我有一个有 4 列的表qtyqtydiffpricevalue

我想要after update trigger在 qty 行值更改(多于一行)时触发。

Before trigger应阅读,并从数量存储旧值和触发后应从新的价值上减去旧值qty列,在得到差值qtydiff繁衍与price列和更新的结果在value列。

下面的代码只是我还没有测试过的概念代码,我不确定它是否有效,但是有没有办法让更新前后在同一个触发器中工作?

 CREATE TRIGGER [dbo].[Price_Modified]
       ON [dbo].[STOCK]
       BEFORE UPDATE ON STOCK
    AS BEGIN
        SET NOCOUNT ON;
        IF UPDATE (Qty) 
        BEGIN
            SELECT qty
            FROM STOCK
        END 
AFTER UPDATE
    AS BEGIN
        SET NOCOUNT ON;
        IF UPDATE (Qty) 
        BEGIN
            UPDATE Stock
            SET value = price * qtydiff
            FROM STOCK
            WHERE qtydiff = oldvalue - …
Run Code Online (Sandbox Code Playgroud)

trigger sql-server c#

3
推荐指数
1
解决办法
3万
查看次数

如何在postgres的表上创建`而不是`触发器?

我想在 postgresql 中为一个表创建一个触发器。我的表包含有关事件的数据,包括房间号、开始时间和事件持续时间。在新插入表时,我想检查新事件的房间号在新事件发生时是否会很忙。如果是这样,那么我想引发异常,否则将新事件插入表中。我想将触发器声明为instead of触发器,insert但 postgres 不允许在表instead ofinsert操作触发器(我不想只为触发器创建视图)。

我该如何解决这个问题?理论上我可以创建一个after触发器,然后检查新插入的数据是否有效,如果无效则删除。但这在概念上似乎是错误的方法,实际上也可能是错误的(我不确定触发器是否是原子的,也许有人可能已经根据错误的数据做出了错误的决定)。

这是表定义:

create table room_schedule(
  start_date date,
  start_time time,
  room_no int,
  event_id int,
  duration interval,
  primary key(start_date, start_time, room_no, event_id)
);
Run Code Online (Sandbox Code Playgroud)

这是我的触发器和函数定义:

create or replace function inserttrigfunc() returns trigger as $$
declare count int;

begin

with end_time_table(eid, stime, etime) as (
        select event_id, start_time, (start_time + duration) as etime from room_schedule
        where room_no=new.room_no
    ),
        overlapping_time_table(eid, stime, etime) as(
            select * from end_time_table
            where …
Run Code Online (Sandbox Code Playgroud)

postgresql trigger insert functions

3
推荐指数
1
解决办法
1529
查看次数

禁用触发器使 DELETE 快速,但表没有触发器?

我正在从 PostgreSQL 表中删除 750k 行中的 130k。

第一次,花了8个小时才完成删除查询。

第二次,我向表中添加了一个索引,并重建了该索引。现在用了3个小时完成删除查询

第三次,我添加了以下行:

alter table contact disable trigger ALL; 
delete from contact where ....; 
alter table contact enable trigger ALL;
Run Code Online (Sandbox Code Playgroud)

删除行花了不到一秒钟的时间。即使没有与当前和外键表关联触发器

即使没有与表关联的触发器,这种快速查询性能的原因可能是什么?数据库级别还有其他类型的触发器吗?

postgresql trigger foreign-key ddl postgresql-performance

3
推荐指数
1
解决办法
107
查看次数

DB2 触发器:仅更新当前行

我创建了以下触发器:

CREATE TRIGGER probeer2
  AFTER INSERT ON libtn01leb.kofax_release
  FOR EACH ROW
  UPDATE libtn01leb.kofax_release SET RRNR='bleh'
Run Code Online (Sandbox Code Playgroud)

此触发器将更新表中的每一行,而不是我当前添加的行。我怎样才能让它只对我插入的行有效?

trigger db2

2
推荐指数
1
解决办法
6077
查看次数

如果“插入或更新后触发器”停止工作,是否可以通知我?

上周,我发现我after insert or update trigger没有工作。在我禁用并启用它后,它又开始工作了。

我还不知道它为什么停止工作。有什么办法可以解决这个问题吗?因为此触发器正在记录日常作业的值,并用于报告目的。如果这个触发器在没有我通知或错误的情况下在几天内消失,我将陷入困境。

我正在使用 Oracle 10g,使用 sqldeveloper 访问数据库

My Trigger

create or replace
TRIGGER MASTER.INSTANCE_STEP_TRG 
AFTER INSERT OR UPDATE OF SYSID,STEP_ID,INSTANCE_ID,PARENT_STEP_ID ON MASTER.WF_INSTANCE_STEP 
REFERENCING OLD AS old NEW AS new 
FOR EACH ROW 
WHEN (new.sysid > 0) 
declare 
stepSysid number;
crCode varchar(50);
crDate date;
step_id number;
BEGIN
  step_id := :new.step_id;

  select ss.sysid into stepSysid from TEMPLATE.wf_step ws 
  inner join TEMPLATE.step_stage ss on ss.sysid=ws.stage_id
  where ws.sysid= step_id;


  if ( stepSysid>0) then
    insert into MASTER.fact_cr_progress values(0,:new.instance_id,stepSysid,:new.create_dt);
  end …
Run Code Online (Sandbox Code Playgroud)

trigger oracle oracle-10g

2
推荐指数
1
解决办法
1778
查看次数

寻找触发器来更改插入字符串?

我有一个 MSSQL Server 2008 数据库。
我的数据库中有一些表,如下所示:
table1, table2, table3, ....
每个表都有一个 NVARCHAR(50) 字段 ( Name)
现在,我想更改每个 sql 查询在该字段中插入的字符串,
例如:
我们有想要在Name字段中插入“示例文本”的查询。
我想使用 SQL 触发器将其更改为“示例名称”

是否可以使用 sql 触发器?如果是这样,如何?我对 T-SQL 很幼稚
有没有更好的方法可以用 SQL Server 做到这一点?

trigger sql-server-2008 sql-server t-sql

2
推荐指数
1
解决办法
6377
查看次数

在 mysql 上模拟序列,为迁移到 oracle 做准备

我一直在开发一个针对 MySQL 的应用程序,而一个新的开发服务器正在慢慢建立。新的开发服务器将使用 oracle,并且由于我们即将准备就绪,我想从主键中删除 auto_increment 属性,并模拟 Oracle 的序列。我好几年没用oracle了。

由于每个预插入触发器都会做同样的事情——从 *foo_sequence* 中获取表foo的下一个 id ,Oracle 是否允许实现某种形式的动态/词法触发?

任何提示、技巧或陷阱?

编辑 #1:1550 - 这不是一个频繁使用的应用程序。一次使用将导致在最大的事务中插入 13 次小的、简单的记录。并发性是未知的,但一个用户导致任何重要的锁饥饿的可能引擎盖是估计非常低的 IMO。

编辑 #2 1612:目的是在 mysql 中模拟 oracle 序列,然后在 oracle 上使用 oracle 序列。

谢谢。

解析度:

  • 我正在实现一个类作为序列的接口。
    • 在 mysql 上,我正在实现一个表来保存序列值,以及一个存储过程来获取下一个值并更新行。该类将调用此存储过程并返回值。
    • 在 oracle 上,我只会从 oracle 序列中获取下一个值。班级会提出这个要求。Sequence 类将从序列中请求下一个值。
  • 应用程序代码将使用 Sequence 类来获取插入的下一个序列值,从使用该值的插入语句中抽象出“nextval”实现细节。

mysql trigger oracle

2
推荐指数
1
解决办法
952
查看次数

创建根据枚举值插入行的触发器?

我对触发器很陌生,我遇到了一般问题。我想实现这一目标:

CREATE TABLE `searcharticles` (
 `articleID` int(11) unsigned NOT NULL,
 `ean` char(13) COLLATE utf8_unicode_ci DEFAULT NULL,
 `manufacturerNumber` varchar(20) COLLATE utf8_unicode_ci NOT NULL,  
 PRIMARY KEY (`articleID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci


CREATE TABLE `addresses` (
 `articleID` int(11) unsigned NOT NULL,
 `shop` enum('shop1','shop2') COLLATE utf8_unicode_ci NOT NULL,
 `url` varchar(255) COLLATE utf8_unicode_ci NULL,
 `status` tinyint(3) NOT NULL DEFAULT '0',
 `createTime` datetime NOT NULL,
 `updateTime` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
 PRIMARY KEY (`articleID`,`shop`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci 
Run Code Online (Sandbox Code Playgroud)

searcharticles 中插入新行时,应填充表 …

mysql trigger syntax

2
推荐指数
1
解决办法
1839
查看次数

SQL 选择 WHERE 行已更新

USE [RF_WORLD]
GO
/****** Object:  Trigger [dbo].[lastdeathtrigg]    Script Date: 08/20/2012 10:52:58 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      Mauro Tamm
-- =============================================
ALTER TRIGGER [dbo].[lastdeathtrigg]
   ON  [dbo].[tbl_pvporderview]
   AFTER UPDATE
AS 
IF (UPDATE(Death))
BEGIN
    SET NOCOUNT ON;
DECLARE @userserial int;
SELECT @userserial ='serial' WHERE UPDATE(Death)
Insert INTO [RF_WORLD].[dbo].[lastdeath]
(serial)
VALUES (@userserial)
END
Run Code Online (Sandbox Code Playgroud)

where 部分是可疑的,它会像那样工作吗?本质上,如果它实际更新,我只需要它选择行序列值。

trigger sql-server select update

2
推荐指数
1
解决办法
3749
查看次数

是否可以使用触发器监视角色和权限授予/撤销?

是否可以使用触发器监视角色和权限授予/撤销?我知道使用 Oracle 审计工具来做到这一点,但有趣的是可以使用触发器来做到这一点。

trigger oracle audit

2
推荐指数
1
解决办法
5029
查看次数