精华内容
下载资源
问答
  • MySql触发器语句

    2021-04-20 06:59:03
    删除Drop trigger tri_cus_wallet_...创建DELIMITER $CREATE TRIGGER tri_cus_wallet_update AFTER UPDATE ON cus_wallet FOR EACH ROWBEGININSERT INTO cus_wallet_his(orgid,userid,rechargemoney,subsidymoney,...

    删除

    Drop trigger tri_cus_wallet_update;

    创建

    DELIMITER $

    CREATE TRIGGER tri_cus_wallet_update AFTER  UPDATE ON cus_wallet FOR EACH ROW

    BEGIN

    INSERT INTO cus_wallet_his(

    orgid,

    userid,

    rechargemoney,

    subsidymoney,

    totalmoney,

    integral,

    rechargemoney_new,

    subsidymoney_new,

    totalmoney_new,

    create_user,

    create_time,

    update_user,

    update_time,

    reserve1

    )values(

    OLD.orgid,

    OLD.userid,

    (NEW.rechargemoney-OLD.rechargemoney),

    (NEW.subsidymoney-OLD.subsidymoney),

    OLD.totalmoney,

    OLD.integral,

    NEW.rechargemoney,

    NEW.subsidymoney,

    NEW.totalmoney,

    OLD.create_user,

    now(),

    OLD.update_user,

    now(),

    NEW.reserve1

    );

    END $

    DELIMITER ;

    标签:语句,触发器,OLD,update,cus,subsidymoney,MySql,rechargemoney,NEW

    来源: https://www.cnblogs.com/Mr-xy/p/11653771.html

    展开全文
  • CREATE TRIGGER google_inventory BEFORE UPDATE ON `cataloginventory_stock_item`FOR EACH ROWBEGINupdate `catalog_product_entity_int`set value=20where attribute_id=552and entity_id=NEW.product_idand NEW....

    CREATE TRIGGER google_inventory BEFORE UPDATE ON `cataloginventory_stock_item`

    FOR EACH ROW

    BEGIN

    update `catalog_product_entity_int`

    set value=20

    where attribute_id=552

    and entity_id=NEW.product_id

    and NEW.is_in_stock=0;

    update `catalog_product_entity_int`

    set value=21

    where attribute_id=552

    and entity_id=NEW.product_id

    and NEW.is_in_stock=1;

    END;

    It gives me the following error:

    1064 - You have an error in your SQL syntax; check the manual that

    corresponds to your MySQL server version for the right syntax to use

    near '' at line 4

    I'm a SQL Server guy by trade and can't put my finger on what the issue is.

    解决方案

    You need to change the delimiter. Without it, semicolon is ending CREATE TRIGGER statement.

    delimiter |

    CREATE TRIGGER google_inventory BEFORE UPDATE ON `cataloginventory_stock_item`

    FOR EACH ROW

    BEGIN

    update `catalog_product_entity_int`

    set value=20

    where attribute_id=552

    and entity_id=NEW.product_id and NEW.is_in_stock=0;

    update `catalog_product_entity_int`

    set value=21

    where attribute_id=552

    and entity_id=NEW.product_id and NEW.is_in_stock=1;

    END;

    |

    delimiter ;

    展开全文
  • mysql创建触发器问题

    2021-01-27 04:56:44
    你的位置:问答吧->... 问题详情mysql创建触发器问题我想在mysql上创建一个触发器,原代码如下CREATE TRIGGER comment_afterdelete_on_mynewbefore DELETE ON tb1_mynewFOR EACH ROWBEGINselect * from...

    你的位置:

    问答吧

    -> MySQL

    -> 问题详情

    mysql创建触发器问题

    我想在mysql上创建一个触发器,原代码如下

    CREATE TRIGGER comment_afterdelete_on_mynew

    before DELETE ON tb1_mynew

    FOR EACH ROW

    BEGIN

    select * from tb1_mynew;

    END

    不知道为什么老是报第五行有语法错误,也就是我把select语句去掉就可以用了,但我单独测试过这个select语句是正确的

    我该怎么解决。

    我的mysql是linux上的,版本号是5.0.45

    作者: wgczxm

    发布时间: 2011-12-21

    已经提示:

    Not allowed to return a result set from a trigger

    在TRIGGER中不能返回结果集,你要达到什么目的

    作者: WWWWA

    发布时间: 2011-12-21

    我其实是想在触发器里做一个删除语句,但无论我在触发器里写什么sql语句都会报语法错误。我已经在外部验证过这些语句都是正确的。我改过里面的语句,改成delete也是不对的。

    作者: wgczxm

    发布时间: 2011-12-21

    你的代码?不能对本表进行操作

    delimiter $$

    CREATE TRIGGER comment_afterdelete_on_mynew

    before DELETE ON tb1_mynew

    FOR EACH ROW

    BEGIN

    sql 语句;

    END;$$

    delimiter ;

    作者: WWWWA

    发布时间: 2011-12-21

    我的代码不是对本表 而是对另外一张表啊。

    作者: wgczxm

    发布时间: 2011-12-21

    用3楼格式修改你的TRIGGER

    作者: WWWWA

    发布时间: 2011-12-21

    好的,我试试看;

    作者: wgczxm

    发布时间: 2011-12-21

    实验过了,不行。语法错误,这次变成delimiter $$有语法错误了;

    作者: wgczxm

    发布时间: 2011-12-21

    引用 7 楼 wgczxm 的回复:

    实验过了,不行。语法错误,这次变成delimiter $$有语法错误了;

    代码是什么,在命令行下输入?

    作者: WWWWA

    发布时间: 2011-12-21

    TRIIGER 中不可以有返回记录集的语句。 你的这个 select * from tb1_mynew; 会返回结果集。 希望通过这个语句实现什么功能? 不会是在DELETE的时候还需要显示一下 select * from tb1_mynew; 吧。

    作者: ACMAIN_CHM

    发布时间: 2011-12-21

    展开全文
  • oracle触发器语句

    2021-04-30 10:17:25
    ORACLE中触发器的判断IF语句加一行 NULL 即可例如:SQL> DECLARE 2 testvalue INT; 3 BEGIN 4 testvalue := 200; 5 6 IF testvalue > 100 THEN 7 8 ELSIF testvalue = 100 THEN 9 dbms_output.put_line( '100'...

    ORACLE中触发器的判断IF语句

    加一行 NULL 即可例如:SQL> DECLARE 2 testvalue INT; 3 BEGIN 4 testvalue := 200; 5 6 IF testvalue > 100 THEN 7 8 ELSIF testvalue = 100 THEN 9 dbms_output.put_line( '100' ); 10 ELSE 11 dbms_output.put_line( '100-' ); 12 END IF; 13 14 END; 15 / ELSIF testvalue = 100 THEN *ERROR 位于第 8 行:ORA-06550: 第 8 行, 第 9 列:PLS-00103: 出现符号 "TESTVALUE"在需要下列之一时::= . ( @% ;ORA-06550: 第 14 行, 第 4 列:PLS-00103: 出现符号 ";"在需要下列之一时:if上面的例子, 可以看出,如果 IF ELSE 里面, 没有内容, 那么编译不通过。

    下面是 加一行 NULL 通过的例子:SQL> DECLARE 2 testvalue INT; 3 BEGIN 4 testvalue := 200; 5 6 IF testvalue > 100 THEN 7 NULL; 8 ELSIF testvalue = 100 THEN 9 dbms_output.put_line( '100' ); 10 ELSE 11 dbms_output.put_line( '100-' ); 12 END IF; 13 14 END; 15 /PL/SQL 过程已成功完成。

    按照触发方式,oracle的触发器分为语句级和行级两种类型,在视图上

    DML触发器有三类:1, insert触发器;2, update触发器;3, delete触发器;触发器的组成部分: 触发器的声明,指定触发器定时,事件,表名以类型 触发器的执行,PL/SQL块或对过程的调用 触发器的限制条件,通过where子句实现类型: 应用程序触发器,前台开发工具提供的; 数据库触发器,定义在数据库内部由某种条件引发;分为: DML触发器; 数据库级触发器; 替代触发器;DML触发器组件:1,触发器定时2,触发器事件3,表名4, 触发器类型5, When子句6, 触发器主体可创建触发器的对象:数据库表,数据库视图,用户模式,数据库实例创建DML触发器: Create [or replace] trigger [模式.]触发器名 Before| after insert|delete|(update of 列名)On 表名[for each row]When 条件PL/SQL块For each row的意义是:在一次操作表的语句中,每操作成功一行就会触发一次;不写的话,表示是表级触发器,则无论操作多少行,都只触发一次;When条件的出现说明了,在DML操作的时候也许一定会触发触发器,但是触发器不一定会做实际的工作,比如when 后的条件不为真的时候,触发器只是简单地跳过了PL/SQL块;Insert触发器的创建:create or replace trigger tg_insertbefore insert on studentbegin dbms_output.put_line('insert trigger is chufa le 。

    ..');end;/执行的效果:SQL> insert into student2 values(202,'dongqian','f');insert trigger is chufa le 。..update表级触发器的例子:create or replace trigger tg_updatestudentafter update on studentbegin dbms_output.put_line('update trigger is chufale 。

    ..');end;/运行效果:SQL> update student set se='f';update trigger is chufale 。..已更新8行;可见,表级触发器在更新了多行的情况下,只触发了一次;如果在after update on student后加上For each row的话就成为行级触发器,运行效果:SQL> update student set se='m';update trigger is chufale 。

    ..update trigger is chufale 。..update trigger is chufale 。

    ..update trigger is chufale 。..update trigger is chufale 。

    ..update trigger is chufale 。..update trigger is chufale 。

    ..update trigger is chufale 。..已更新8行;:new 与: old:必须是针对行级触发器的,也就是说要使用这两个变量的触发器一定有for each row这两个变量是系统自动提供的数组变量,:new用来记录新插入的值,old用来记录被删除的值;使用insert的时候只有:new里有值;使用delete的时候只有:old里有值;使用update的时候:new和:old里都有值;可以这样使用: dbms_output.put_line('insert trigger is chufa dbms_output.put_line('new id is : '||:new.stui dbms_output.put_line('new name is : '||:new.st dbms_output.put_line('new se is : '||:new.se);可以这样从数据字典中查看一个表上有哪几个触发器:SQL> select trigger_name from user_triggers2 where table_name=upper('student');TRIGGER_NAME------------------------------TG_INSERTTG_UPDATESTUDENT带有:old变量的行级delete触发器:create or replace trigger tg_deletestudentbefore delete on studentfor each rowbegin dbms_output.put_line('old is: '||:old.stuid); dbms_output.put_line('old name: '||:old.stuname);end;/运行效果:SQL> delete from student;old is: 202old name: dongqianold is: 101old name: liudehuaold is: 102old name: lingqingxiaold is: 103old name: lichanggongold is: 104old name: zhenxiuwenold is: 1001old name: lilianjieold is: 1009old name: tongleifuckold is: 203old name: kfdjold is: 209old name: fuck已删除9行When的使用:如果在begin也就是说触发器的PL/SQL主体块执行前加上when(old.se='f')的话,DML操作照做不误,但是只会在删除Se='f'的那行的时候才会执行触发器的主体动作,执行效果:SQL> delete from student;old is: 209old name: fuck已删除9行; 这里虽然删了9行,但是只执行了一次触发器的主体,做为一个行级触发器;混合类型触发器:Inserting,deleting,updating三个谓词可以分别指示当前操作到底是哪个;create or replace trigger hunhetriggerbefore insert or update or delete on studentfor each rowbegin if inserting then dbms_output.put_line('insert le。

    '); end if; if deleting then dbms_output.put_line('delete le 。

    .'); end if;end;/插入的时候就自动判断当前动作为插入:SQL> insert into student values(303,'me','f');insert le。

    。删除的时候就自动判断当前动作为删除:SQL> delete from student;delete le 。

    。.注意,既然触发器内部的主体PL/SQL是语句,那么它同样也可以是插入删除操作而不一定只是dbms_output打印一些信息;这正是日志表的原理:在用户执行了DML语句的时候触发主体为插入日志表以记录操作轨迹的触发器;为什么用触发器? 当我们有两个表用来记录商品的出库入库情况,good_store用来记录库存的产品类别和数量,而good_out用来记录出库的产品类别和数量,那么每当我们出库的某个类别的产品一定数量的时候,我们应该在good_out中插入该产品的类别和出库数量,而同时也应该在good_store表中用update来更新库存的相应类别的产品。

    ORACLE中触发器的判断IF语句

    加一行 NULL 即可

    例如:

    SQL> DECLARE

    2 testvalue INT;

    3 BEGIN

    4 testvalue := 200;

    5

    6 IF testvalue > 100 THEN

    7

    8 ELSIF testvalue = 100 THEN

    9 dbms_output.put_line( '100' );

    10 ELSE

    11 dbms_output.put_line( '100-' );

    12 END IF;

    13

    14 END;

    15 /

    ELSIF testvalue = 100 THEN

    *

    ERROR 位于第 8 行:

    ORA-06550: 第 8 行, 第 9 列:

    PLS-00103: 出现符号 "TESTVALUE"在需要下列之一时:

    := . ( @

    % ;

    ORA-06550: 第 14 行, 第 4 列:

    PLS-00103: 出现符号 ";"在需要下列之一时:

    if

    上面的例子, 可以看出,如果 IF ELSE 里面, 没有内容, 那么编译不通过。

    下面是 加一行 NULL 通过的例子:

    SQL> DECLARE

    2 testvalue INT;

    3 BEGIN

    4 testvalue := 200;

    5

    6 IF testvalue > 100 THEN

    7 NULL;

    8 ELSIF testvalue = 100 THEN

    9 dbms_output.put_line( '100' );

    10 ELSE

    11 dbms_output.put_line( '100-' );

    12 END IF;

    13

    14 END;

    15 /

    PL/SQL 过程已成功完成。

    Oracle中触发器有几种,用法与SQL Server一样吗

    ORACLE触发器有以下两类: 1 语句级(Statement-level)触发器,在CREATE TRIGGER语句中不包含FOR EACH ROW子句。

    语句级触发器对于触发事件只能触发一次, 而且不能访问受触发器影响的每一行的列值。一般用语句级触发器处理有关引起触发器触发的SQL语句的信息——例如,由谁来执行 2 行级(Row-level)触发器,在CREATE TRIGGER语句中包含FOR EACH ROW子句。

    行级触发器可对受触发器影响的每一行触发,并且能 够访问原列值和通过SQL语句处理的新列值。行级触发器的典型应用是当需要知道行的列值时,执行一条事务规则。

    SQL Server支持两种类型的触发器: AFTER 触发器和INSTEAD OF 触发器。其中AFTER 类型触发器要求只有执行某一操作(INSERT UPDATE DELETE) 之后,触发器才被触发,且只能在表上定义。

    可以为针对表的同一操作定义多个触发器。对于AFTER 触发器,可以定义哪一个触发器被最先触发,哪一个被最后触发,通常使用系统过程sp_settriggerorder 来完成此任务。

    INSTEAD OF 触发器表示并不执行其所定义的操作(INSERT、 UPDATE、 DELETE),而仅是执行触发器本身。既可在表上定义INSTEAD OF 触发器,也可以在视图上定义INSTEAD OF 触发器,但对同一操作只能定义一个INSTEAD OF 触发器。

    展开全文
  • 创建触发器的时候sql语句里面加上begin,end就报错。如果删除了begin,end就没问题。但是不用begin的话一个触发器没法执行两个以上的sql。加上begin想要在一个触发器执行两个sql文。 报错内容是 #42000You have an ...
  • MySQL中,创建触发器

    2021-03-23 20:19:35
    在MySQL中,创建触发器语法如下: CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt 其中: trigger_name:标识触发器名称,用户自行指定; trigger_time:标识触发...
  • ORACLE创建触发器

    2021-10-20 15:09:44
    EDITIONABLE|NONEDITIONABLE,指明触发器是否允 许被编辑。默认为EDITI-ONABLE。BEFORE|AFTER,触发器在触发事件执行之前...默认为语句级简单 DML触发器,即不管触发语句影响多少行数据,触发器只执 行一次。ENAB...
  • 在我的应用程序迁移文件的创建过程中,我注意到Laravel不支持数据库触发器!我已经接受了这样一个事实:我需要执行一个查询语句来实现这一点,但这也给了我麻烦..这是我的应用程序的代码片段:Schema::create('users',...
  • Navicat 创建MySQL触发器

    2021-06-07 15:23:40
    1.设计表 选择触发器,键入名,选择触发模式(BEFORE,AFTER),选择触发方式(插入,更新,删除) 2.定义触发器
  • oracle创建与常见问题Oracle DBA Studio 工具里面就能创建触发器CREATE TRIGGER名称CREATE TRIGGER — 创建一个新触发器语法CREATE TRIGGER name { BEFORE | AFTER } { event [OR ...] }ON table FOR E...
  • 语句触发器我们先看一个AFTER-INSERT-STATEMENT触发器:CREATE OR REPLACE TRIGGER temp_aisAFTER INSERT ON TEMPBEGINdbms_output.put_line(‘executing temp_ais‘);END;看一下下面语句的结果:SQL> set ...
  • SQL Server创建触发器

    2021-02-28 09:14:10
    在本教程中,将学习如何使用SQL Server CREATE TRIGGER语句创建新的触发器。SQL Server CREATE TRIGGER语句简介CREATE TRIGGER语句用于创建一个新的触发器,只要针对表发生INSERT,DELETE或UPDATE等事件,就会自动...
  • 这里写自定义目录标题前言触发器的定义触发器的作用触发器的优点触发器的缺点触发器的分类DML触发器DDL触发器登录触发器触发器的种类after...-SQL语句来增删查改触发器创建触发器删除触发器查询触发器修改触发器...
  • BEGINDECLAREi_jcidVARCHAR(50);DECLAREi_jkcxVARCHAR(50);DECLAREi_jksjVARCHAR(50);DECLAREi_resultVARCHAR(100)default... END if语句应该怎么写,哪位大神给指导一下,在线等,我上面这样写是有问题的,求指导 展开
  • 创建触发器语句和报错信息 问题原因和解决方案: 仔细检查很久,并没有发现创建触发器语句有什么问题。然后去MySQL官网查看,看到这段说明: 如官网这段文字所述,使用BEGIN … END构造,如果使用mysql程序...
  • 软件安装:装机软件必备包SQL是Structured Query Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。...MySQL中的触发器是由insert、update和d...
  • set serveroutput oncreate or replace trigger xxxbeforeupdateon empfor each rowbeginupdate backups set sal=:new.sal where empno=:new.empno;dbms_output.put_line('成功备份:'||:new.empno||'的工资'||:new....
  • --创建触发器及作用举例create or replace trigger tribefore delete on emp--在删除emp表数据之前需要做的事根据自己的业务去写,before是在之前做的事,after是在之后要做的事declaret_result number := 10;...
  • 示例 1:行级 INSERT 触发器以下触发器是一个行级 INSERT 触发器的示例。它检查为新雇员输入的出生日期是否合理:CREATE TRIGGER check_birth_dateAFTER INSERT ON EmployeesREFERENCING NEW AS new_employeeFOR ...
  • 目录1 AFTER触发器2 INSTEAD OF触发器 1 AFTER触发器 [USE <数据库名> GO] CREATE TRIGGER <...**例:**创建一个删除学生成绩的触发器。 CREATE TRIGGER SCCJ ON SC FOR DELETE AS PRINT’学生已经被删除’;
  • END’ at line 6 解决方法: 您的格式设置已关闭,请记住DELIMITER $$语句是必需的,因为它与创建存储过程没有什么不同. 滚动文档大约一半以查看示例. 但是,这就是你要找的东西: DELIMITER $$ CREATE TRIGGER tg_new...
  • createtriggertri_crkoncrkbforinsertAsDeclare@crchar(2),@wlnumchar(7),@cknumchar(7),@slintSelect@cr=crfrominsertedSelect@wlnum=wlmunfrominsertedSelect@cknum=cknumfrominser...create trigger tri_crk on c...
  • 说明:Mysql5.0以上的版本才支持下面的操作。Mysql 触发器的插入、更新、删除操作。在这里建了两个表:其中这两个表的...1.创建表:create table admin(id int,name char(30),age int(3),email char(100));create ta...
  • MySQL8.0创建触发器

    2021-12-05 07:59:56
    在测试中发现添加了referencing new row as newtuple 语句后会出现42000的报错,在查看mysql8.0官方文档后作出改进,代码如下所示: delimiter // create trigger xxx before insert on xx for each statement ...
  • Oracle 语句触发器

    2021-05-07 02:27:11
    Oracle 语句级触发器先构造一个表:create table emp2(id number(2),name varchar(10),currdate date,action varchar2(1))创建触发器:create or replace trigger d_i_u_emp2after insert or update or delete on ...
  • Oracle DBA Studio 工具里面就能创建触发器CREATE TRIGGER名称CREATE TRIGGER — 创建一个新触发器语法CREATE TRIGGER name { BEFORE | AFTER } { event [OR ...] }ON table FOR EACH { ROW | STATEMENT }EXECUTE ...
  • 1、建表首先先建两张表(users表和number表),具体设计如下图:2、存储过程写一个存储过程,往users表中插入数据,创建过程如下:代码如下BEGIN#Routine body goes here...declare n bigint;set n = 201121029684;...
  • riqi chuku cpid 2011-1-10 5 1 2011-1-11 2 1 2011-1-12 8 2 ================================ 入库出库后TB1的kucun字段中的数据自动更新,删除或修改后也要自动更新,请高手帮忙写个SQL触发器,问题解决追加100分,...
  • 在Mysql中创建触发器通过SQL语句CREATE TRIGGER来实现,其语法形式如下: CREATE trigger trigger_name BEFORE|AFTER trigger_EVENT ontable_name for EACH ORW trigger_STMT 参数trigger_name表示创建触发器
  • 什么是mysql触发器需要MySQL 5 对触发器的支持是在MySQL 5中增加的。因此,本章内容适用于MySQL 5或之后的版本。MySQL语句在需要时被执行,存储过程也是如此。但是,如果你想要某条语句(或某些语句)在事件发生时自动...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 95,658
精华内容 38,263
关键字:

创建触发器的语句是