精华内容
下载资源
问答
  • D触发器Verilog描述

    千次阅读 2014-12-09 20:49:49
     今日偶然看到一些知名企业笔试试题,随便扫描了下,看到有几道关于FPGA/CPLD题目,小小编程题,用VerilogHDL或VHDL语言编触发器,脑袋转了一下,模糊似乎清晰,清晰又像浸入模糊,呵呵。。。上半年,由于...

    D触发器Verilog描述

        今日偶然看到一些知名企业的笔试试题,随便扫描了下,看到有几道关于FPGA/CPLD的题目,小小的编程题,用VerilogHDL或VHDL语言编触发器,脑袋转了一下,模糊似乎清晰,清晰又像浸入模糊,呵呵。。。上半年,由于Boss项目,学习了FPGA,学的有点急,也断断续续的,才过几个月,似乎知识已经远去,打开电脑,速览以前的资料,记忆又回来了。。。简单记录下这道题,权当回忆。。。

    • //基本D触发器

    module D_EF(Q,D,CLK)

    input D,CLK;

    output Q;

    reg Q;                           //在always语句中被赋值的信号要声明为reg类型 寄存器定义

    always @ (posedge CLK) //上升沿,下降沿用negedge表示,^_^ 需要记忆

           begin Q <= D; end

    endmodule

     

    • //带异步清0、异步置1的D触发器

    module D_EF(q,qn,d,clk,set,reset)

    input d,clk,set,reset;

    output q,qn;

    reg q,qn;//寄存器定义

    always @ (posedge clk or negedge set or negedge reset)

           begin

                  if(!reset) begin q<=0;qn<=1;end//异步清0,低有效

                  else if(!set) begin q<=1;qn<=1;end //异步置1,低有效

                  else begin q<=~d;qn<=~d;end

           end  

    endmodule

     

    • //带同步清0、同步置1的D触发器

    module D_EF(q,qn,d,clk,set,reset)

    input d,clk,set,reset;

    output q,qn;

    reg q,qn;

    always @ (posedge clk)

           begin

                  if(reset) begin q<=0;qn<=1;end//同步清0,高有效

                  else if(set) begin q<=1;qn<=1;end //同步置1,高有效

                  else begin q<=~d;qn<=~d;end

           end  

    endmodule

    展开全文
  • 然后在A表创建一个触发器,在'delete'之前,执行插入数据,把要删除数据插入另一个表中。这可行吗?要怎么实现? 还有什么更好方法可以实现? 刚学数据库,不太会,可能描述不清楚,谢谢各位大牛抽出时间解答。
  • 关于触发器、存储过程和DBlink综合运用 需求描述: 需要在两个不同oracl数据库实例中进行数据逻辑处理。如果A实例中表有新数据插入或者数据更新,那么在B实例中执行与之相关存储过程。 先假设A数据用户中表...
    关于触发器、存储过程和DBlink的综合运用
    需求描述:
    需要在两个不同oracl数据库实例中进行数据逻辑处理。如果A实例中的表有新数据插入或者数据更新,那么在B实例中执行与之相关的存储过程。
    先假设A数据用户中表TEST有变动,那么触发器触发调用实例B中的存储过程改写TEST_LOG表
    A中操作如下:
    1.建表
    -------------------------------------------------------------------
    create table TEST
    (
    T_ID NUMBER(4),
    T_NAME VARCHAR2(20),
    T_AGE NUMBER(2),
    T_SEX CHAR(1)
    );
    -------------------------------------------------------------------
    2.建立与B对应的DBLINK
    -------------------------------------------------------------------
    create database link INFOSYSTEM
    connect to infosystem identified by infosystem
    using '(DESCRIPTION =
    (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.249)(PORT = 1521))
    )
    (CONNECT_DATA =
    (SERVICE_NAME = ORCL)
    )
    )';
    ------------------------------------------------------------------
    3.建立触发器
    ------------------------------------------------------------------
    CREATE OR REPLACE TRIGGER test_trigger
    AFTER DELETE OR INSERT OR UPDATE ON test
    DECLARE
    v_type VARCHAR2(15);
    BEGIN
    IF INSERTING THEN
    v_type := 'INSERT';
    DBMS_OUTPUT.PUT_LINE('记录已经成功插入,并已记录到日志');
    ELSIF UPDATING THEN
    v_type := 'UPDATE';
    DBMS_OUTPUT.PUT_LINE('记录已经成功更新,并已记录到日志');
    ELSIF DELETING THEN
    v_type := 'DELETE';
    DBMS_OUTPUT.PUT_LINE('记录已经成功删除,并已记录到日志');
    END IF;
    my_pro@infosystem(v_type);
    END;
    ----------------------------------------------------------------

    B中操作如下:
    1.建表
    ----------------------------------------------------------------
    create table TEST_LOG
    (
    L_USER VARCHAR2(15),
    L_TYPE VARCHAR2(15),
    L_DATE VARCHAR2(30)
    );
    ----------------------------------------------------------------
    2.建存储过程
    注意一定要加上PRAGMA AUTONOMOUS_TRANSACTION;让这个存储过程有自治的事务控制,不然会影响A的事务控制
    ----------------------------------------------------------------
    create or replace procedure my_pro(v_type varchar2)
    as
    PRAGMA AUTONOMOUS_TRANSACTION;
    begin
    INSERT INTO test_log VALUES(user,v_type,
    TO_CHAR(sysdate,'yyyy-mm-dd hh24:mi:ss'));
    commit;
    end;
    ---------------------------------------------------------------

    最后我们在A中输入以下测试语句:
    INSERT INTO test VALUES(101,'zhao',22,'M');
    UPDATE test SET t_age = 30 WHERE t_id = 101;
    DELETE test WHERE t_id = 101;

    SELECT * FROM test;
    SELECT * FROM test_log@INFOSYSTEM;


    结果可能如下:
    TEST无数据
    TEST_LOG数据
    1 AAAPF0AALAAABq8AAA INFOSYSTEM DELETE 2009-06-12 13:45:30
    2 AAAPF0AALAAABq8AAL INFOSYSTEM INSERT 2009-06-12 13:45:30
    3 AAAPF0AALAAABq8AAM INFOSYSTEM UPDATE 2009-06-12 13:45:30
    展开全文
  • 关于触发器的使用,有很多争议。触发器的好处不言而喻是增强了数据的校验能力,能够有效地实现复杂的业务逻辑。在一定程度上走的比约束和check走的更远。关于触发器的坏处,最典型的就是触发器的使用会导致系统性能...

    关于触发器的使用,有很多争议。
    触发器的好处不言而喻是增强了数据的校验能力,能够有效地实现复杂的业务逻辑。在一定程度上走的比约束和check走的更远。
    关于触发器的坏处,最典型的就是触发器的使用会导致系统性能下降,数据的不可控性,尤其是跨表检测,以及可能导致的触发器递归更加加深了数据的维护难度和不可控性。

    本文无意讨论触发器的原理和好坏,旨在描述一个关于批量数据提交时的触发器是如何设计的。

    SET QUOTED_IDENTIFIER ON 
    GO
    SET ANSI_NULLS ON 
    GO

    CREATE TRIGGER [TRI_xxx] ON xxx
    FOR INSERT,UPDATE
    AS
    SET NOCOUNT ON

    DECLARE 
    --检测标志设置
      @CHECK INT,    
    --定义公共变量 
      @TODAY DATETIME
    --定义基表变量
      @field1 INT,
      @field2 INT,
      @field3 VARCHAR(20),
      @fieldN INT,
    --定义跨表变量  
      @table1_field1 INT,
      @table1_field2 INT,
      @tableN_fieldM INT
    --定义游标
      DECLARE cur_xxx CURSOR FOR
        SELECT field1,field2,field3,fieldN FROM INSERTED 
    --如果非集合修改,则定义为如下
    /*
    SELECT @field1=field1,
           @field2=field2,
           @field3=field3,
           @field4=field4,
    FROM INSERTED
    */

      SET @TODAY=CONVERT(VARCHAR(10),GETDATE(),120)
      
      OPEN CUR_ZYGD
      FETCH NEXT FROM cur_xxx INTO @field1,@field2,@field3,@fieldN

      WHILE (@@FETCH_STATUS=0) 
      BEGIN

    ------------------------------------------------------------------------
    --------------------以下针对不同的规则,进行相关处理--------------------
    ------------------------------------------------------------------------

    --满足某某条件,则不处理直接退出
      IF cond1
      BEGIN
        CLOSE cur_xxx             --非游标,无需该语句
        DEALLOCATE cur_xxx        --非游标,无需该语句
        RETURN
      END

    --满足某某条件,则提示处理直接退出
      IF cond2
      BEGIN  
        RAISERROR('XXX错误!',16,1)
        ROLLBACK TRAN 
        CLOSE cur_xxx             --非游标,无需该语句
        DEALLOCATE cur_xxx        --非游标,无需该语句
        RETURN  
      END
      
    --跨表检查,满足某某条件,则提示处理直接退出
      SELECT TOP 1 @table1_field1=field1 FROM table1 WHERE 1=1
      IF cond3 IS NOT NULL
      BEGIN
        RAISERROR('XXX错误!',16,1)
        ROLLBACK TRAN
        CLOSE cur_xxx            --非游标,无需该语句
        DEALLOCATE cur_xxx       --非游标,无需该语句
        RETURN  
      ELSE 
      BEGIN
        SET @field1=@table1_field1  --可能会根据其他跨表的结果更新当前值
      END  
      
      --最后根据主键更新相关值
      UPDATE xxx 
         SET field1=@field1,
             field2=@field2
       WHERE PrimaryKey=@PrimaryKey AND (ISNULL(field1,'')<>ISNULL(@field1,'') OR ISNULL(field2,0)<>ISNULL(@field2,0))

      FETCH NEXT FROM cur_xxx INTO @field1,@field2,@field3,@fieldN

    END

    CLOSE CUR_xxx
    DEALLOCATE CUR_xxx

    SET NOCOUNT OFF

    GO
    SET QUOTED_IDENTIFIER OFF 
    GO
    SET ANSI_NULLS ON 
    GO

    展开全文
  • 问题描述:在一个表中插入一条数据时,同时想更新这条数据 错误写法: create table t1 ( a int(11), b int(11) ) CREATE TRIGGER trigger BEFORE INSERT ON t1 FOR EACH ROW BEGIN update t1 set new.a=1; ...

    问题描述:在一个表中插入一条数据时,同时想更新这条数据

    错误写法:

    create table t1
    (
    	a int(11),
    	b int(11)
    )
    
    CREATE TRIGGER trigger
    BEFORE
    INSERT ON t1
    FOR EACH ROW
    BEGIN
    	update t1 set new.a=1;
    END

    这样会报这个错误:Can't update table 't1' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

    原因是触发器里不能对刚插入的数据update,网上有的人解释是会造成触发器循环调用,但触发器明明是insert类型,而update语句只能激活update类型的触发器?这个疑问先记下。。。

    几种触发器类型和激活语句如下

    上面触发器正确的写法应该把update t1去掉就可以了

    CREATE TRIGGER trigger
    BEFORE
    INSERT ON t1
    FOR EACH ROW
    BEGIN
    	set new.a=1;
    END

     

    展开全文
  • 触发器

    2009-06-06 10:27:00
     下面我摘录了SQL Server官方教程中的一段关于触发器的文字,确实有用的一点文字描述。 可以定义一个无论何时用INSERT语句向表中插入数据时都会执行的触发器。 当触发INSERT触发器时,新的数据行就会被插入到...
  • 下面我摘录了SQL Server官方教程中的一段关于触发器的文字,确实有用的一点文字描述。 可以定义一个无论何时用INSERT语句向表中插入数据时都会执行的触发器。 当触发INSERT触发器时,新的数据行就会被插入到触发器...
  • 触发器的使用

    2009-02-14 13:05:00
    SQL 2000中的触发器使用 触发器是数据库应用中的重用...下面我摘录了SQL Server官方教程中的一段关于触发器的文字,确实有用的一点文字描述。_____________________________________________________________________
  • 1、关于锁存器与触发器在原理上不同点,以及代码不同点 2、关于高电平有效与低电平有效之前区别 3、理解实现复位与实现D触发器之间区别 4、理解同步与异步之间区别 锁存器代码编写 Module D_...
  • 在某环境中数据表存在多个触发器,数据增删改是标准每个表都有的触发器,此外还存在关于校验的触发器;起因是写完触发器后,有一次同事询问说触发器不起作用了,没有提示错误,但是数据无法保存;我也有点...
  • 触发器的介绍

    2007-06-21 19:05:00
    触发器是数据库应用中...下面我摘录了SQL Server官方教程中的一段关于触发器的文字,确实有用的一点文字描述。_________________________________________________________________可以定义一个无论何时用INSERT语句向
  • 下面我摘录了SQL Server官方教程中的一段关于触发器的文字,确实有用的一点文字描述。 可以定义一个无论何时用INSERT语句向表中插入数据时都会执行的触发器。 当触发INSERT触发器时,新的数据行就会被插入到触发器...
  • 上面描述了一个最简单边沿触发D触发器:输入数据D,在下一时钟周期就输出Q。其中,数据存储时刻是时钟信号上升沿(跳变瞬间),即寄存器Q在时钟上升沿采样到数据D,并更新存储内容;除了时钟上升沿其他时刻...
  • 触发器的一些使用

    2008-10-30 11:13:00
     下面摘录了SQL Server官方教程中的一段关于触发器的文字,确实有用的一点文字描述。 可以定义一个无论何时用INSERT语句向表中插入数据时都会执行的触发器。 当触发INSERT触发器时,新的数据行就会被插入到触发器
  • 现在公司有台机器,机器状态有0,1,2,3,机器开启运行状态时候是0,其他 1、2和3对应是其他状态,机器一开启就会自动有...请问我table2触发器代码哪里出问题了,请大神帮我分析下,可以加我QQ详细描述:584958184
  • 数据库触发器讲解

    2011-12-09 15:58:44
    数据库中关于触发器的概述和运用,有实例描述哦!祝你更好的理解关于触发器的各个问题。

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 174
精华内容 69
关键字:

关于触发器的描述