`
wangyanlong0107
  • 浏览: 502796 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

触发器后记

 
阅读更多

 

   终于修改好了触发器,对于使用自治事务的行级触发器,需要判断正在修改的数据的比较,之前一直写错了,这回来个最终版本的,之前的错误是rownum引起的。

select * From (select rownum rn,表.* from 表) where rn = 2  rownum使用=号时需要使用别名

===============================================

CREATE OR REPLACE TRIGGER TB_PER_POSITONLEVEL_TRI

AFTER INSERT OR UPDATE OF c_effectivedate,c_postionlevel,c_postioncluster OR DELETE ON TB_PER_POSITONLEVEL

FOR EACH ROW

DECLARE

position_effdate DATE;

position_level varchar2(64);

position_order varchar2(64);

position_oid varchar2(128);

cou NUMBER(3);

PRAGMA AUTONOMOUS_TRANSACTION;

BEGIN

     --SELECT COUNT(*) INTO cou FROM (SELECT a.c_oid FROM TB_PER_POSITONLEVEl a,tb_inf_employee b WHERE a.c_empoid = b.c_employeeid AND  a.c_empoid = :NEW.c_empoid ORDER BY nvl(a.C_EFFECTIVEDATE,TO_DATE('1900/01/01 00:00:00', 'YYYY/MM/DD HH24:MI:SS') ) DESC,a.c_operatetime DESC);

     --INSERT INTO A_TEMP VALUES(cou);

     IF inserting THEN

        SELECT COUNT(*) INTO cou FROM (SELECT a.c_oid FROM TB_PER_POSITONLEVEl a,tb_inf_employee b WHERE a.c_empoid = b.c_employeeid AND  a.c_empoid = :NEW.c_empoid ORDER BY nvl(a.C_EFFECTIVEDATE,TO_DATE('1900/01/01 00:00:00', 'YYYY/MM/DD HH24:MI:SS') ) DESC,a.c_operatetime DESC);

 

       -- INSERT INTO A_TEMP VALUES('行级别触发器after');

        --INSERT INTO A_TEMP VALUES(position_oid);

        --INSERT INTO A_TEMP VALUES( to_char(position_effdate,'fmdd month yyyy') );

        --INSERT INTO A_TEMP VALUES(position_level);

        --INSERT INTO A_TEMP VALUES(position_order);

        --INSERT INTO A_TEMP VALUES(cou);

        --以前有记录,插入记录需要与以往记录的最大日期比较。

        IF cou <> 0 THEN

           SELECT CASE WHEN :new.c_oid = c_oid THEN :NEW.c_postionlevel ELSE c_postionlevel END INTO position_level FROM (SELECT a.c_oid, a.c_postionlevel FROM TB_PER_POSITONLEVEl a,tb_inf_employee b WHERE a.c_empoid = b.c_employeeid AND  a.c_empoid = :NEW.c_empoid ORDER BY nvl(a.C_EFFECTIVEDATE,TO_DATE('1900/01/01 00:00:00', 'YYYY/MM/DD HH24:MI:SS') ) DESC,a.c_operatetime DESC)  WHERE ROWNUM =1 ;

           SELECT  c_effectivedate  INTO position_effdate FROM (SELECT a.c_oid,a.c_effectivedate FROM TB_PER_POSITONLEVEl a,tb_inf_employee b WHERE a.c_empoid = b.c_employeeid AND  a.c_empoid = :NEW.c_empoid ORDER BY nvl(a.C_EFFECTIVEDATE,TO_DATE('1900/01/01 00:00:00', 'YYYY/MM/DD HH24:MI:SS') ) DESC,a.c_operatetime DESC) WHERE ROWNUM =1 ;

           SELECT CASE WHEN :new.c_oid = c_oid THEN :new.c_postioncluster ELSE c_postioncluster END INTO position_order FROM (SELECT a.c_oid,a.c_postioncluster FROM TB_PER_POSITONLEVEl a,tb_inf_employee b WHERE a.c_empoid = b.c_employeeid AND  a.c_empoid = :NEW.c_empoid ORDER BY nvl(a.C_EFFECTIVEDATE,TO_DATE('1900/01/01 00:00:00', 'YYYY/MM/DD HH24:MI:SS') ) DESC,a.c_operatetime DESC) WHERE ROWNUM =1 ;

           SELECT c_oid INTO position_oid FROM (SELECT a.c_oid FROM TB_PER_POSITONLEVEl a,tb_inf_employee b WHERE a.c_empoid = b.c_employeeid AND  a.c_empoid = :NEW.c_empoid ORDER BY nvl(a.C_EFFECTIVEDATE,TO_DATE('1900/01/01 00:00:00', 'YYYY/MM/DD HH24:MI:SS') ) DESC,a.c_operatetime DESC) WHERE ROWNUM =1 ;

 

           IF position_effdate <= :NEW.c_effectivedate THEN

              --INSERT INTO A_TEMP VALUES('插入的是最新的');

              UPDATE tb_inf_employee t SET t.c_positionlevel = :NEW.c_postionlevel,

                                      t.c_positionorder = :NEW.c_postioncluster WHERE t.c_employeeid = :NEW.C_EMPOID;

            END IF;

            ELSIF position_effdate > :NEW.c_effectivedate THEN

              --INSERT INTO A_TEMP VALUES('插入的不是最新的,没有影响');

              UPDATE tb_inf_employee t SET t.c_positionlevel = position_level,

                                      t.c_positionorder = position_order WHERE t.c_employeeid = :NEW.C_EMPOID;

 

            END IF;

        END IF;

        --以前没有记录,插入一条记录。

        IF cou = 0 THEN

           UPDATE tb_inf_employee t SET t.c_positionlevel = :NEW.c_postionlevel,

                                      t.c_positionorder = :NEW.c_postioncluster WHERE t.c_employeeid = :NEW.C_EMPOID;

        END IF;

     IF deleting THEN

        SELECT COUNT(*) INTO cou FROM (SELECT a.c_oid FROM TB_PER_POSITONLEVEl a,tb_inf_employee b WHERE a.c_empoid = b.c_employeeid AND  a.c_empoid = :OLD.c_empoid ORDER BY nvl(a.C_EFFECTIVEDATE,TO_DATE('1900/01/01 00:00:00', 'YYYY/MM/DD HH24:MI:SS') ) DESC,a.c_operatetime DESC);

 

       -- INSERT INTO A_TEMP VALUES('行级别触发器after');

        --INSERT INTO A_TEMP VALUES(position_oid);

       -- INSERT INTO A_TEMP VALUES( to_char(position_effdate,'fmdd month yyyy') );

       -- INSERT INTO A_TEMP VALUES(position_level);

        --INSERT INTO A_TEMP VALUES(position_order);

      --  IF(:OLD.c_oid == )

      --不是最后一条记录,排除:old.oid所在记录,排序取最大值

        IF cou <> 1 THEN

           SELECT c_postionlevel INTO position_level FROM (SELECT a.c_postionlevel FROM TB_PER_POSITONLEVEl a,tb_inf_employee b WHERE a.c_oid <> :OLD.c_oid AND a.c_empoid = b.c_employeeid AND  a.c_empoid = :OLD.c_empoid ORDER BY nvl(a.C_EFFECTIVEDATE,TO_DATE('1900/01/01 00:00:00', 'YYYY/MM/DD HH24:MI:SS') ) DESC,a.c_operatetime DESC)  WHERE ROWNUM =1 ;

           SELECT c_effectivedate INTO position_effdate FROM (SELECT a.c_effectivedate FROM TB_PER_POSITONLEVEl a,tb_inf_employee b WHERE a.c_oid NOT IN (:OLD.c_oid) AND a.c_empoid = b.c_employeeid AND  a.c_empoid = :OLD.c_empoid ORDER BY nvl(a.C_EFFECTIVEDATE,TO_DATE('1900/01/01 00:00:00', 'YYYY/MM/DD HH24:MI:SS') ) DESC,a.c_operatetime DESC) WHERE ROWNUM =1 ;

           SELECT c_postioncluster INTO position_order FROM (SELECT a.c_postioncluster FROM TB_PER_POSITONLEVEl a,tb_inf_employee b WHERE a.c_oid NOT IN (:OLD.c_oid) AND a.c_empoid = b.c_employeeid AND  a.c_empoid = :OLD.c_empoid ORDER BY nvl(a.C_EFFECTIVEDATE,TO_DATE('1900/01/01 00:00:00', 'YYYY/MM/DD HH24:MI:SS') ) DESC,a.c_operatetime DESC) WHERE ROWNUM =1 ;

           SELECT c_oid INTO position_oid FROM (SELECT a.c_oid FROM TB_PER_POSITONLEVEl a,tb_inf_employee b WHERE a.c_empoid = b.c_employeeid AND  a.c_empoid = :OLD.c_empoid AND a.c_oid <> :old.c_oid ORDER BY nvl(a.C_EFFECTIVEDATE,TO_DATE('1900/01/01 00:00:00', 'YYYY/MM/DD HH24:MI:SS') ) DESC,a.c_operatetime DESC) WHERE ROWNUM =1 ;

           UPDATE tb_inf_employee t SET t.c_positionlevel = position_level,

                                     t.c_positionorder = position_order WHERE t.c_employeeid = :OLD.C_EMPOID;

        END IF;

        --删除最后一条记录,都置空

        IF cou = 1 THEN

           UPDATE tb_inf_employee t SET t.c_positionlevel = '',

                                     t.c_positionorder = '' WHERE t.c_employeeid = :OLD.C_EMPOID;

        END IF;

     END IF;

     IF UPDATing THEN

        INSERT INTO A_TEMP VALUES('更新开始=====================================');

        --更新之前的,最大生效日期,和最大生效日期对应的id

        SELECT  c_effectivedate  INTO position_effdate FROM (SELECT a.c_effectivedate FROM TB_PER_POSITONLEVEl a,tb_inf_employee b WHERE a.c_empoid = b.c_employeeid AND  a.c_empoid = :NEW.c_empoid ORDER BY nvl(a.C_EFFECTIVEDATE,TO_DATE('1900/01/01 00:00:00', 'YYYY/MM/DD HH24:MI:SS') ) DESC,a.c_operatetime DESC) WHERE ROWNUM =1 ;

        INSERT INTO A_TEMP VALUES('更新之前的原排序最大生效日期:');

        INSERT INTO a_temp VALUES(position_effdate);

        SELECT c_oid INTO position_oid FROM (SELECT a.c_oid FROM TB_PER_POSITONLEVEl a,tb_inf_employee b WHERE a.c_empoid = b.c_employeeid AND  a.c_empoid = :NEW.c_empoid ORDER BY nvl(a.C_EFFECTIVEDATE,TO_DATE('1900/01/01 00:00:00', 'YYYY/MM/DD HH24:MI:SS') ) DESC,a.c_operatetime DESC) WHERE ROWNUM =1 ;

        INSERT INTO A_TEMP VALUES('更新之前的原排序最大记录oid:');

        INSERT INTO a_temp VALUES(position_oid);

        --未修改生效时间,未影响排序

        IF :NEW.c_effectivedate = :OLD.c_effectivedate THEN 

           INSERT INTO A_TEMP VALUES('           1 此次修改,未修改生效日期!');

           SELECT CASE WHEN :new.c_oid = c_oid THEN :NEW.c_postionlevel ELSE c_postionlevel END INTO position_level FROM (SELECT a.c_oid, a.c_postionlevel FROM TB_PER_POSITONLEVEl a,tb_inf_employee b WHERE a.c_empoid = b.c_employeeid AND  a.c_empoid = :NEW.c_empoid ORDER BY nvl(a.C_EFFECTIVEDATE,TO_DATE('1900/01/01 00:00:00', 'YYYY/MM/DD HH24:MI:SS') ) DESC,a.c_operatetime DESC)  WHERE ROWNUM =1 ;        

           SELECT CASE WHEN :new.c_oid = c_oid THEN :new.c_postioncluster ELSE c_postioncluster END INTO position_order FROM (SELECT a.c_oid,a.c_postioncluster FROM TB_PER_POSITONLEVEl a,tb_inf_employee b WHERE a.c_empoid = b.c_employeeid AND  a.c_empoid = :NEW.c_empoid ORDER BY nvl(a.C_EFFECTIVEDATE,TO_DATE('1900/01/01 00:00:00', 'YYYY/MM/DD HH24:MI:SS') ) DESC,a.c_operatetime DESC) WHERE ROWNUM =1 ;

         --SELECT c_oid INTO position_oid FROM (SELECT a.c_oid FROM TB_PER_POSITONLEVEl a,tb_inf_employee b WHERE a.c_empoid = b.c_employeeid AND  a.c_empoid = :NEW.c_empoid ORDER BY nvl(a.C_EFFECTIVEDATE,TO_DATE('1900/01/01 00:00:00', 'YYYY/MM/DD HH24:MI:SS') ) DESC,a.c_operatetime DESC) WHERE ROWNUM =1 ;

        --INSERT INTO A_TEMP VALUES('行级别触发器after');

        --INSERT INTO A_TEMP VALUES(position_oid);

       -- INSERT INTO A_TEMP VALUES( to_char(position_effdate,'fmdd month yyyy') );

       -- INSERT INTO A_TEMP VALUES(position_level);

       -- INSERT INTO A_TEMP VALUES(position_order);

          UPDATE tb_inf_employee t SET t.c_positionlevel = position_level,

                                     t.c_positionorder = position_order WHERE t.c_employeeid = :NEW.C_EMPOID;

                                     END IF;

        --修改生效时间,以前的查询结果的生效时间最大值不是修改的项,修改的生效日期 大于等于 原排序结果的生效日期,取新的

        IF :NEW.c_effectivedate <> :OLD.c_effectivedate AND position_oid <> :OLD.c_oid AND :NEW.c_effectivedate >= position_effdate THEN 

           INSERT INTO A_TEMP VALUES('           2 此次修改,修改了生效日期!且原排序最大值不是dirty!且改后的生效日期 大于 原排序最大生效日期!');

           UPDATE tb_inf_employee t SET t.c_positionlevel = :NEW.c_postionlevel,

                                     t.c_positionorder =  :new.c_postioncluster WHERE t.c_employeeid = :NEW.C_EMPOID;

        END IF;

        --修改生效时间,以前的查询结果的生效时间最大值不是修改的项,修改的生效日期 小于 原排序结果的生效日期,取原生效结果的

        IF :NEW.c_effectivedate <> :OLD.c_effectivedate AND position_oid <> :OLD.c_oid AND :NEW.c_effectivedate < position_effdate THEN 

           INSERT INTO A_TEMP VALUES('           3 此次修改,修改了生效日期!且原排序最大值不是dirty!且改后的生效日期 小于 原排序最大生效日期!');

           SELECT CASE WHEN :new.c_oid = c_oid THEN :NEW.c_postionlevel ELSE c_postionlevel END INTO position_level FROM (SELECT a.c_oid, a.c_postionlevel FROM TB_PER_POSITONLEVEl a,tb_inf_employee b WHERE a.c_empoid = b.c_employeeid AND  a.c_empoid = :NEW.c_empoid ORDER BY nvl(a.C_EFFECTIVEDATE,TO_DATE('1900/01/01 00:00:00', 'YYYY/MM/DD HH24:MI:SS') ) DESC,a.c_operatetime DESC)  WHERE ROWNUM =1 ;  

           SELECT CASE WHEN :new.c_oid = c_oid THEN :new.c_postioncluster ELSE c_postioncluster END INTO position_order FROM (SELECT a.c_oid,a.c_postioncluster FROM TB_PER_POSITONLEVEl a,tb_inf_employee b WHERE a.c_empoid = b.c_employeeid AND  a.c_empoid = :NEW.c_empoid ORDER BY nvl(a.C_EFFECTIVEDATE,TO_DATE('1900/01/01 00:00:00', 'YYYY/MM/DD HH24:MI:SS') ) DESC,a.c_operatetime DESC) WHERE ROWNUM =1 ;       

        --INSERT INTO A_TEMP VALUES('行级别触发器after');

        --INSERT INTO A_TEMP VALUES(position_oid);

       -- INSERT INTO A_TEMP VALUES( to_char(position_effdate,'fmdd month yyyy') );

       -- INSERT INTO A_TEMP VALUES(position_level);

       -- INSERT INTO A_TEMP VALUES(position_order);

          UPDATE tb_inf_employee t SET t.c_positionlevel = position_level,

                                     t.c_positionorder = position_order WHERE t.c_employeeid = :NEW.C_EMPOID;

        END IF;

        --修改生效时间,以前的查询结果的最大生效日期就是修改的项,且修改后的日期 大于等于原来排序结果生效日期,取新的

        IF :NEW.c_effectivedate <> :OLD.c_effectivedate AND position_oid = :OLD.c_oid AND :NEW.c_effectivedate >=position_effdate THEN

           INSERT INTO A_TEMP VALUES('           4 (调大最大生效日期的日期)此次修改,修改了生效日期!且原排序最大值是dirty!且改后的生效日期 >= 原排序最大生效日期!');

           UPDATE tb_inf_employee t SET t.c_positionlevel = :NEW.c_postionlevel,

                                     t.c_positionorder =  :new.c_postioncluster WHERE t.c_employeeid = :NEW.C_EMPOID;

        END IF;

        --修改生效时间,以前的查询结果的生效时间最大值是修改的项,修改的生效日期 小于 原排序结果的生效日期,取原生效结果的第二行记录,然后比较

        IF :NEW.c_effectivedate <> :OLD.c_effectivedate AND position_oid = :OLD.c_oid AND :NEW.c_effectivedate <position_effdate THEN 

           INSERT INTO A_TEMP VALUES('           5 (调小最大生效日期的日期,此时与第二大生效日期比较)此次修改,修改了生效日期!且原排序最大值是dirty!且改后的生效日期 < 原排序最大生效日期!');

           --SELECT  c_postionlevel  INTO position_level FROM (SELECT ROWNUM rn,a.c_oid, a.c_postionlevel FROM TB_PER_POSITONLEVEl a,tb_inf_employee b WHERE a.c_empoid = b.c_employeeid AND  a.c_empoid = :NEW.c_empoid ORDER BY nvl(a.C_EFFECTIVEDATE,TO_DATE('1900/01/01 00:00:00', 'YYYY/MM/DD HH24:MI:SS') ) DESC,a.c_operatetime DESC)  WHERE rn = 2 ;

           --SELECT c_postioncluster  INTO position_order FROM (SELECT ROWNUM rn,a.c_oid,a.c_postioncluster FROM TB_PER_POSITONLEVEl a,tb_inf_employee b WHERE a.c_empoid = b.c_employeeid AND  a.c_empoid = :NEW.c_empoid ORDER BY nvl(a.C_EFFECTIVEDATE,TO_DATE('1900/01/01 00:00:00', 'YYYY/MM/DD HH24:MI:SS') ) DESC,a.c_operatetime DESC) WHERE rn = 2 ;

           SELECT C_EFFECTIVEDATE INTO position_effdate

                  FROM (SELECT ROWNUM RN, C_EFFECTIVEDATE

                       FROM (SELECT A.C_EFFECTIVEDATE

                            FROM TB_PER_POSITONLEVEL A, TB_INF_EMPLOYEE B

                                  WHERE A.C_EMPOID = B.C_EMPLOYEEID

                                         AND A.C_EMPOID = :NEW.c_empoid

                                             ORDER BY NVL(A.C_EFFECTIVEDATE,

                                                   TO_DATE('1900/01/01 00:00:00',

                                                                       'YYYY/MM/DD HH24:MI:SS')) DESC,

                                                                                   A.C_OPERATETIME DESC))

                                                                                                   WHERE RN = 2;

           SELECT c_postioncluster INTO position_order

                  FROM (SELECT ROWNUM RN, c_postioncluster

                       FROM (SELECT A.c_postioncluster

                            FROM TB_PER_POSITONLEVEL A, TB_INF_EMPLOYEE B

                                  WHERE A.C_EMPOID = B.C_EMPLOYEEID

                                         AND A.C_EMPOID = :NEW.c_empoid

                                             ORDER BY NVL(A.c_postioncluster,

                                                   TO_DATE('1900/01/01 00:00:00',

                                                                       'YYYY/MM/DD HH24:MI:SS')) DESC,

                                                                                   A.C_OPERATETIME DESC))

                                                                                                   WHERE RN = 2;  

          SELECT c_postionlevel INTO position_level

                  FROM (SELECT ROWNUM RN, c_postionlevel

                       FROM (SELECT A.c_postionlevel

                            FROM TB_PER_POSITONLEVEL A, TB_INF_EMPLOYEE B

                                  WHERE A.C_EMPOID = B.C_EMPLOYEEID

                                         AND A.C_EMPOID = :NEW.c_empoid

                                             ORDER BY NVL(A.c_postionlevel,

                                                   TO_DATE('1900/01/01 00:00:00',

                                                                       'YYYY/MM/DD HH24:MI:SS')) DESC,

                                                                                   A.C_OPERATETIME DESC))

                                                                                                   WHERE RN = 2;                                                                                                                                                                                                                   

           --%%如果新记录日期 < 第二个最大的,取第二个最大的。

           IF :NEW.c_effectivedate < position_effdate THEN

              INSERT INTO A_TEMP VALUES('        5.1调小最大生效日期的日期 < 原排序第二条最大记录');

              INSERT INTO A_TEMP VALUES(position_level);

              UPDATE tb_inf_employee t SET t.c_positionlevel = position_level,

                                     t.c_positionorder = position_order WHERE t.c_employeeid = :NEW.C_EMPOID;

           END IF;

           --%%如果新记录日期 > =第二个最大的,取新纪录 。

           IF :NEW.c_effectivedate >= position_effdate THEN

              INSERT INTO A_TEMP VALUES('修改生效日期,原排序最大值是dirty,找第二条最大记录,且新日期大于第二条最大记录');

              UPDATE tb_inf_employee t SET t.c_positionlevel = :NEW.c_postionlevel,

                                     t.c_positionorder =  :new.c_postioncluster WHERE t.c_employeeid = :NEW.C_EMPOID;

           END IF;

        END IF;

        INSERT INTO A_TEMP VALUES('更新ENDING============================================');

     END IF;

    COMMIT;

END TB_PER_POSITONLEVEL_TRI;

====================================================================

一定要注意有order by 的rownum的位置。蓝色字体可以查看rownum是否正确。

 

select * From (select rownum rn,表.* from 表) where rn = 2这么用

 

分享到:
评论

相关推荐

    数据库课程设计世界杯赛事信息管理系统.docx

    后记部分可能总结了项目实施的过程、遇到的问题以及解决方案,对于学习和改进数据库设计有重要意义。 综上所述,这个课程设计涵盖了数据库管理系统的核心概念,包括需求分析、概念结构设计、逻辑结构设计、SQL操作...

    SQLite3 API编程手册.pdf

    SQLite 是一个文件型数据库,每个数据库是一个文件,可以建立多个表、索引、触发器等。 基本流程 i. 关键数据结构:sqlite3* 类型是 SQLite 中最常用的数据结构,从数据库打开开始,SQLite 就要为这个类型准备好...

    数据库课程设计报告世界杯赛事信息管理系统.docx

    **后记** 系统设计完成后,经过测试和调整,确保其稳定性和实用性。该系统不仅能满足世界杯赛事信息管理的需求,也为其他大型体育赛事的信息管理提供了参考。 总之,这个世界杯赛事信息管理系统是一个综合性的...

    OSWORKFlow流程开发教程

    后记 - **持续学习与社区参与**:鼓励开发者深入理解OSWorkflow的工作原理,积极参与开源社区,共享知识和经验,共同促进工作流引擎的发展。 综上所述,OSWorkflow不仅是一个强大的工作流引擎,还提供了丰富的功能...

    数据库课程设计报告世界杯赛事信息管理系统.pdf

    ### 触发器设计 可能包含对数据更新时自动执行的操作,如自动更新射手榜、积分榜等。 ### 后记 总结设计过程、经验教训及未来改进方向。 该课程设计综合运用了数据库理论与实践,展示了如何通过数据库技术解决实际...

    osworkflow 开发指南

    #### 十六、后记 - **总结**:回顾OSWorkflow的学习和使用心得,并提出未来可能的发展方向。 通过以上内容,我们可以了解到OSWorkflow不仅是一个强大的工作流引擎,还具有高度的灵活性和可扩展性。无论是初学者还是...

    mysql教程详细总结

    涵盖触发器、存储过程、视图、分区表、事务处理等进阶话题。 学习新的数据库 了解其他数据库系统,如PostgreSQL、Oracle,可以帮助拓展数据库管理技能。 后记 持续学习和实践是掌握MySQL的关键。随着技术的发展,...

    oracle数据迁移到db2数据库的实现方法(分享)

    **注意事项和后记** 在实际迁移过程中,可能还会遇到其他问题,如触发器、存储过程、视图、序列(Sequence)等的迁移。Oracle 的序列在 DB2 中可能需要转换为生成序列的触发器或者自增列。视图的定义也需要在目标...

    设备管理子系统数据库设计报告书.doc

    - **触发器设计**:响应特定数据库事件,自动执行操作。 - **并发处理设计**:包括事务管理和锁机制,确保多用户环境下的数据一致性。 7. **安全性设计**: - **身份认证**:验证用户身份。 - **用户管理**:...

    重庆工程学院zabbix网络监控实验指导书

    学生需学习如何根据实际需求制定监控模板、触发器和报警策略。 #### 教学方法 - **理论讲授**:通过PPT展示Zabbix监控原理、SNMP协议机制等内容。 - **实践操作**:分组练习,每组学生完成Zabbix服务器的安装配置、...

    MySQL安全策略(MySQL安全注意事项)

    - 使用触发器辅助增强数据安全,防止恶意篡改。 4. **后记**: - 数据安全需要全方位的策略和规范,每个参与者的安全意识至关重要。只有当所有人都重视并遵循这些规范,才能构建出真正安全的信息环境。 综上所述...

    informix 实用大全

    本书由专业Informix用户、数据库管理员、Informix管理员和应用程序开发员编写而成,把各大Informix产品的方方面面综合、深入地集中在一起,包括最新Informix产品的详细信息,如Informix Internet Foundation....后记

Global site tag (gtag.js) - Google Analytics