精华内容
下载资源
问答
  • 在BORROW建立一个触发器,完成如下功能:如果读者借阅的书名是"数据库技术及应用",就将该读者的借阅记录保存在BORROW_SAVE表中(注ORROW_SAVE结构同BORROW) 在网上能搜到这题的答案,但是就是不理解,...

    在BORROW表上建立一个触发器,完成如下功能:如果读者借阅的书名是"数据库技术及应用",就将该读者的借阅记录保存在BORROW_SAVE表中(注ORROW_SAVE表结构同BORROW表)

    在网上能搜到这题的答案,但是就是不理解,放在自己的MySQL上运行不起来,所以我就自己写了一个经过测试能在MySQL上运行的程序

    delimiter $

    create trigger mybr after insert on borrow for each row

    begin

    insert into borrow_save select * from borrow

    where bno=(select bno from books where bname='数据库技术及应用')

    and cno=new.cno and bno=new.bno;

    end $

    delimiter

    上面是直接插入borrow_save表中,如果没有borrow_save表可以创建表,可以这样写

    delimiter $

    create trigger mybr after insert on borrow for each row

    begin

    create table  borrow_save (select * from borrow

    where bno=(select bno from books where bname='数据库技术及应用')

    and cno=new.cno and bno=new.bno);

    end $

    delimiter

     

    转载于:https://www.cnblogs.com/laibaoo/p/5982450.html

    展开全文
  • 先创建一个表 create table a( id number(2), MC number(2), gxsj number(2), type number(2) ) 给的多个字段创建触发器 CREATE OR REPLACE TRIGGER weather_history_update -- weather_history...

    完整代码如下:

    先创建一个表

    create table a(
         id number(2),
          MC number(2),
           gxsj number(2),
            type number(2)
    )
    

    给表的多个字段创建触发器

    CREATE OR REPLACE TRIGGER weather_history_update  -- weather_history_update为触发器名称
         AFTER update or insert on  a  --AFTER 指定 触发时间,on后跟表名称,即当表Yjzhaccess.T_SRC_WEATHER_TSPG有更新或者插入时触发时间
         for each row                                                                                                     --每一行
         begin                                                                                           
         insert into yjzhhistory.t_src_weather (ID,MC,SSXQDM,gxsj,type)  --指定插入的表及字段
        VALUES(:new.ID,:new.MC,:new.gxsj,:new.type);                                          --将新插入的数据引入到该表中
        end;
    

    如图
    在这里插入图片描述

    展开全文
  • 触发器实现当一个表中字段发生变化时同时改变另一个表中字段 1.建表 新建两个表一个叫做Telephonics用来存放航班全部字段的数据,主键为SelfNum航迹号;另一个一个叫做FlightAndSection用来存放航迹号、航班号、扇区...

    触发器实现当一个表中字段发生变化时同时改变另一个表中字段

    1.建表

    新建两个表一个叫做Telephonics用来存放航班全部字段的数据,主键为SelfNum航迹号;另一个一个叫做FlightAndSection用来存放航迹号、航班号、扇区编号、时间字段。

    create table Telephonics(
    
    -------------------------------总体----------------------------------
    TrackNum  tinyint null,     --包中航迹的数量,不能超过255                                  00    
    ID int identity(1,1),
    ---------------------------短字节共有部分---------------------                                                
    TrackRelted int null,			--航迹相关性,第一个bit 1是 0非,后七个bit航迹来源  01 
    SelfNum int not null	primary key,	--航迹号 具有唯一性                                02    
    SSRCode int null,			--应答机编码     2字节非负整数                     04 
    Latitude float null,			--位置__纬度,4字节浮点数,单位:弧度, 网络序       06
    Longitude float null,			--位置__经度,4字节浮点数,单位:弧度, 网络序       10
    VelComOfLati int null,			--纬度速度分量,4字节,单位:弧度/秒, 网络序       14
    VelComOfLong int null,			-- 经度速度分量,4字节,单位:弧度/秒, 网络序      18
    Altitude int null,			-- 飞行高度,2字节整数,单位100英尺,网络序          22
    TTime datetime null,			--时间,自1970/1/1起,秒数
    ---------------------------长字节特有------------------------
    FlightNum varchar(20)	null,		--航班号,8字节                                    28
    DepartAp  varchar(20)	null,		--起飞机场,四字节代码                             36
    DepartTi  varchar(20)	null,		--起飞时间,可能为UTC时间                          40
    Aircraft  varchar(20)	null,		--机型,6字节                                      44
    Section   varchar(20)	null,		--扇区编号,2字节                                  50
    Tail      varchar(20)	null,		--尾流类型                                         51 
    )
    create table FlightAndSection
    (
    	TrackCode int not null	primary key,	--航迹号 具有唯一性                        02    
    	FlightCode varchar(20)	null,		--航班号,8字节                            28
    	SectionCode   varchar(20)	null,	--扇区编号,2字节                          50
    	FTime datetime null,			--时间,自1970/1/1起,秒数
    )


    2.创建触发器

    在Telephonics表上创建触发器,当Telephonics表中插入新数据时FlightAndSection表中对应字段(航迹号、航班号、扇区编号、时间)同时插入相应的数据。

    ----当Telephonics发生了插入操作之后,会触发下面这个触发器的执行
    go
    create trigger TR_Telephonics_Insert on Telephonics
    for insert 
    as
    begin
    	/*声明临时变量*/
    	declare @TrackCode int			--存储航迹号 
    	declare @FlightCode varchar(20)		--存储航班号
    	declare @SectionCode varchar(20)	--存储扇区号
    	declare @FTime	datetime 		--当时时间	
    	/*给临时变量赋相应值*/
    	select @TrackCode=SelfNum  from inserted
    	select @FlightCode=FlightNum from inserted
    	select @SectionCode=Section from inserted
    	select @FTime=TTime from inserted
    	/*更新航班表中数据*/
    	insert into FlightAndSection(TrackCode,FlightCode,SectionCode,FTime) values(@TrackCode,@FlightCode,@SectionCode,@FTime)
    end

    说明:定义临时变量是为了接收Telephonics新插入字段的数据

    3.运行结果
















    展开全文
  • 关联间如何建立触发器

    千次阅读 2011-03-31 16:58:00
    实现功能描述:C由A、B关联生成(其中A、B在物理库C在内存数据库),A、B数据变化后通过触发器将变化后记录插入到...在基表A、B上建立触发器,触发器上使用游标操作,进行2个表的关联操作。


    实现功能描述:
           表C由表A、表B关联生成(其中表A、表B在物理库中,表C在内存数据库中),表A、表B数据变化后通过触发器将变化后记录插入到小表C_inc中,通过小表触发,最后用内存库的实时同步功能将C_inc小表中的记录同步到内存库表C中。

     

    问题描述:
          如何将表A、表B变化后的数据插入到小表C_inc中

     

    最初实现方案:
          在物理库建立表A、表B关联的视图C_view,然后在视图C_view上建立触发器,通过视图上的触发器将表的变化数据触发到小表C_inc中。

     

    遇到的问题
    视图上怎么建立触发器?
        

         通过查资料,在视图上建立的触发器为替代触发器,其与DML触发器不同,DML触发器是在DML操作之外运行的,而替代触发器则代替激发它的DML语句运行,代替触发器是行一级的。
    替代触发器的用途:
    1、允许对无法变更的视图进行修改,视图修改后触发基表数据修改
    2、修改视图中嵌套表列的列
    例:
    create trigger ClassRoomInsert
    instead of insert on class_room
    declare
    v_rooid rooms.room_id%TYPE;
    begin
    select room_id
    into v_roomid
    from rooms
    where building = :new.building
    and room_number = :new.room_number;

    set room_id = v_roomid
    where department = :new.department
    and course = :new.course;
    end;
    经上所述,替代触发器实现的是允许无法变更的视图进行修改,而不是我想要的基表变化了,视图随之更新,根据视图的更新插入小表C_inc中记录。

     

    第二种实现方案:
    在触发器中进行2个表数据的关联,触发器如下:
    CREATE OR REPLACE TRIGGER t_mmdb_on_balance_type
    after insert or update on balance_type_attr
    for each row
    declare
    begin
        if inserting then
                insert into mmdb_balance_type_inc(op_sn,op_type,op_time,BALANCE_TYPE_ID,BALANCE_TYPE_ATTR,ACCT_ITEMS,PRIORITY,CYCLE_UPPER_TYPE,CYCLE_UPPER,CYCLE_LOWER_TYPE,CYCLE_LOWER,PAYMENT_LIMIT_TYPE,PAYMENT_LIMIT)
                select 0,'1',sysdate,a.BALANCE_TYPE,a.BALANCE_TYPE_ATTR,a.ACCT_ITEMS,b.PRIORITY,a.CYCLE_UPPER_TYPE,
                a.CYCLE_UPPER,a.CYCLE_LOWER_TYPE,a.CYCLE_LOWER,a.PAYMENT_LIMIT_TYPE,a.PAYMENT_LIMIT
                from BALANCE_TYPE_ATTR a,bss_acctbook_info b
                where a.BALANCE_TYPE = b.acctbooktype
                and a.BALANCE_TYPE = :new.BALANCE_TYPE;
        elsif updating then
                insert into mmdb_balance_type_inc(op_sn,op_type,op_time,BALANCE_TYPE_ID,BALANCE_TYPE_ATTR,ACCT_ITEMS,PRIORITY,CYCLE_UPPER_TYPE,CYCLE_UPPER,CYCLE_LOWER_TYPE,CYCLE_LOWER,PAYMENT_LIMIT_TYPE,PAYMENT_LIMIT)
                select 0,'2',sysdate,a.BALANCE_TYPE,a.BALANCE_TYPE_ATTR,a.ACCT_ITEMS,b.PRIORITY,a.CYCLE_UPPER_TYPE,
                a.CYCLE_UPPER,a.CYCLE_LOWER_TYPE,a.CYCLE_LOWER,a.PAYMENT_LIMIT_TYPE,a.PAYMENT_LIMIT
                from BALANCE_TYPE_ATTR a,bss_acctbook_info b
                where a.BALANCE_TYPE = b.acctbooktype
                and a.BALANCE_TYPE = :new.BALANCE_TYPE;
        end if;
    end;

     

    更新数据时报如下错误:
       ORA-04091: table OCSBILLTEST.BALANCE_TYPE_ATTR is mutating, trigger/function may not see it
       ORA-06512: at "OCSBILLTEST.T_MMDB_ON_BALANCE_TYPE", line 11
       ORA-04088: error during execution of trigger 'OCSBILLTEST.T_MMDB_ON_BALANCE_TYPE'
    基本意思是在是因为在TRIGGER中访问了变化表所引起的,ORACLE资料上说如INSERT语句仅影响一个行,触发器不把触发表当作变化表处理,也就是在trigger里面不要再访问trigger所在的表了。


    修改后的实现方案:
    在基表表A、表B上建立触发器,触发器上使用游标操作,进行2个表的关联操作,触发器如下:
    CREATE OR REPLACE TRIGGER t_mmdb_on_balance_type
    after insert or update on balance_type_attr
    for each row
    declare
        cursor c_priority is
          SELECT priority FROM BSS_ACCTBOOK_INFO where ACCTBOOKTYPE = :new.BALANCE_TYPE;
    begin
     if inserting then
      for v_record in c_priority loop
             insert into mmdb_balance_type_inc(op_sn,op_type,op_time,BALANCE_TYPE_ID,BALANCE_TYPE_ATTR,ACCT_ITEMS,PRIORITY,CYCLE_UPPER_TYPE,CYCLE_UPPER,CYCLE_LOWER_TYPE,CYCLE_LOWER,PAYMENT_LIMIT_TYPE,PAYMENT_LIMIT)
             values(0,'1',sysdate,:new.BALANCE_TYPE,:new.BALANCE_TYPE_ATTR,:new.ACCT_ITEMS,v_record.priority,:new.CYCLE_UPPER_TYPE,
             :new.CYCLE_UPPER,:new.CYCLE_LOWER_TYPE,:new.CYCLE_LOWER,:new.PAYMENT_LIMIT_TYPE,:new.PAYMENT_LIMIT);
         end loop;
     elsif updating then
         for v_record in c_priority loop
             insert into mmdb_balance_type_inc(op_sn,op_type,op_time,BALANCE_TYPE_ID,BALANCE_TYPE_ATTR,ACCT_ITEMS,PRIORITY,CYCLE_UPPER_TYPE,CYCLE_UPPER,CYCLE_LOWER_TYPE,CYCLE_LOWER,PAYMENT_LIMIT_TYPE,PAYMENT_LIMIT)
             values(0,'2',sysdate,:new.BALANCE_TYPE,:new.BALANCE_TYPE_ATTR,:new.ACCT_ITEMS,v_record.priority,:new.CYCLE_UPPER_TYPE,
             :new.CYCLE_UPPER,:new.CYCLE_LOWER_TYPE,:new.CYCLE_LOWER,:new.PAYMENT_LIMIT_TYPE,:new.PAYMENT_LIMIT);
         end loop;
     end if;
    end;

    由于自己在SQL方面知识比较欠缺,造成建一个关联表的触发器用了4个多小时,还好最后成功的解决了问题,将这之间遇到的问题及解决办法整理了一下,希望能对有同样困扰的人有所帮助。

     

    展开全文
  • 我现在想写一个触发器,当字段 TEST1.C INSERT 数据后,将TEST2中的TEST.B字段 UPDATE为‘DX13’。 ###针对上面的问题我应当怎么写触发器,本人接触数据库时间不长,对这些问题还有些不明白。
  • 我新建的,如下 我的序列是 CREATE SEQUENCE "WOSTORE"."SEQ_TABLE0531" MINVALUE 1 MAXVALUE 999999999999 INCREMENT BY 3 START WITH 65 CACHE 20 NOORDER NOCYCLE ; 我的触发器是: create or replace ...
  • 在BORROW建立一个触发器,完成如下功能:如果读者借阅的书名是"数据库技术及应用",就将该读者的借阅记录保存在BORROW_SAVE表中(注ORROW_SAVE结构同BORROW) 在网上能搜到这题的答案,但是就是不理解,...
  • – 创建触发器 CREATE TRIGGER t_goodsdel – 触发模式,分别有:insert update delete – after 在…之后 – before 在…之前 – on 属于 – goods 基于某一张触发 AFTER delete ON web_goods – 在每行执行 ...
  • 建立触发器

    2018-07-08 22:58:10
    1.为选课表Sc增加参照完整性及违约处理,定义cno为外键,与course表中的cno关联,当删除、更新course的元组时,级联删除、更新Sc表中的相应元组,并进行验证。完整性及违约处理语句如下:ALTER TABLE scADD ...
  • 那么如何实现这张表里面的数据得到一个总的值放在一个字段呢? 第一时间的想法是在这张表(b)里面加触发器实现,但是触发器实现的是两张之间的数据变化。 最后的解决方案是在a表中触发器里面加上更新字段数据...
  • 当我们针对一张表建立触发器的时候,不小心就爆出来了一个ora-04091错误的时候,不要慌,也不要想着建立一个新的试图或者是临时,这样做都太麻烦了,下面我上一个简单明了的方法 create or replace trigger ...
  • 打开Navicat ...打开数据所在的数据库,右击需要...此时进入设计界面 点击【触发器】标签页,输入触发器名称,如trigger1 选择触发条件,before还是after ...
  • 有两个表分别是 A用户下的 T_SRC_WEATHER_TSPG字段如图,B用户下的t_src_weather ,如图:要求,当A用户下的T_SRC_WEATHER_TSPG有插入或者更新数据时,同时将数据同步至B用户下的t_src_weather表中,创建触发器,...
  • CREATE DEFINER = 'root'@'%' TRIGGER `tg_i` AFTER INSERT ON `table1` //建立触发器  FOR EACH ROW BEGIN ...
  • 数据库中表、视图、存储过程、触发器建立及其代码。
  • 这是我的第一篇博客。 有两张:BOOK、PGEVIEW,分别有一个名为BOOKID的...实现方法:在BOOK表中建立一个触发器BOOK_TRG_DELETE,具体实现语句如下: create or replace trigger BOOK_TRG_DELETE  bdfore delete
  • 触发器使用 可以定义一个无论何时用INSERT语句向表中插入数据时都会执行的触发器。 当触发INSERT触发器时,新的数据行就会被插入到触发器表和inserted表中。inserted一个逻辑,它包含了已经插入的数据行的...
  • SQL server 一张随另一张变化,建立触发器 create trigger t_delf on files --建立删除触发器 instead of delete as begin declare @id char(100) declare @sid char(100) select @id=Fname from deleted ...
  • MySql创建一个删除的触发器

    千次阅读 2019-12-17 19:20:03
    使用MySqlWorkbench创建触发器的语法 DELIMITER| CREATE TRIGGER <触发器名> AFTER DELETE ON student FOR EACH ROW BEGIN ...上面是在学生建立一个触发器,当从学生表中删除一条记录时,会把...
  • 如何在navicat for mysql中建立触发器

    千次阅读 2018-05-02 18:20:46
    Mysql的触发器(trigger):监视某种操作,并触发另种操作。简要说:对表M的操作A触发了对表N的操作B。 触发器创建语法四要素:1.、引发对象(哪一张引发的?也就是说M是谁?) 2、触发时间(after/before) 3、被...
  • 使用Navicat 15建立触发器 选择要建立触发器,右键点击选择“设计” 点击“触发器”,输入触发器的名字,选择触发时点“BEFORE”或“AFTER”,选择触发条件:插入、更新或删除 在下方的定义输入语句,...
  • 偶刚接触oracle不久,了解还不是很深,现在有个触发器的问题想请教一下需求是这样的,数据库有几个,想在每个建立一个触发器触发器的功能是,一旦表中的数据有变化后,通过触发器记录一些信息到日志表里,...
  • 在DB2创建第一个触发器

    千次阅读 2008-02-26 10:15:00
    当特定事件在 IBM® DB2® Universal Database™ 数据库...您还将学习如何使用 DB2 UDB Version 8.1 的控制中心来帮助您创建一个应用于简单业务场景的简单触发器。 什么是触发器一个指定的 SQL 操作(如 DELETE,IN
  • 当特定事件在 IBM® DB2® Universal Database™ ...您还将学习如何使用 DB2 UDB Version 8.1 的控制中心来帮助您创建一个应用于简单业务场景的简单触发器。  什么是触发器一个指定的 SQL 操作(如 DELETE,IN...
  • 当我们针对一张表建立触发器的时候,不小心就爆出来了一个ora-04091错误的时候,不要慌,也不要想着建立一个新的试图或者是临时,这样做都太麻烦了,下面我上一个简单明了的方法 create or replace trigger ...
  • 在navicat for mysql中建立触发器

    万次阅读 2016-11-01 09:04:29
    Mysql的触发器(trigger):监视某种操作,并触发另种操作。简要说:对表M的操作A触发了对表N的操作B。   触发器创建语法四要素: 1.、引发对象(哪一张引发的?也就是说M是谁?) 2、触发时间(after/before...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 79,716
精华内容 31,886
关键字:

一个表中建立2个触发器