`

使用触发器进行表数据备份

阅读更多
功能很简单,字段多了点,多一个参数少一个就容易出问题.
如:
too many columns.

最近看了web js优化的,js对内部变量约定为_ 开头如:_name,_age.
触发器写的比较少,临时变量不支持_myVar.可惜.
1.Compilation errors for
Error: PLS-00103: Encountered the symbol "_" when expecting one of the following:

Text: _TMP_PROJECT_ID NUMBER(16,0);

2.ORA-00947:not enough values
列名多,而插入值少.如(A,B,C)VALUES(A,B)

3.ORA-00913:too many values  怎相反
如(A,B,C)VALUES(A,B,C,D)
引用

create or replace trigger TRI_AAA
  before update or delete
   on AAA 
  for each row

declare
     ERR VARCHAR2(100);
--原表字段
TMP_PROJECT_ID NUMBER(16,0);
TMP_COMPANY_ID NUMBER(16,0);
TMP_CREATE_DATETIME DATE;
...
TMP_GROUP_ID NUMBER(16,0);
--新增字段
--TMP_USER_OPT VARCHAR2(64);
--TMP_USER_OPT_DATETIME DATE;
  PRAGMA AUTONOMOUS_TRANSACTION;
begin
TMP_PROJECT_ID:=:OLD.PROJECT_ID;
TMP_COMPANY_ID:=:OLD.COMPANY_ID;
TMP_CREATE_DATETIME:=:OLD.CREATE_DATETIME;
...
TMP_GROUP_ID:=:OLD.GROUP_ID;
if updating then
    INSERT INTO AAA_LOG(PROJECT_ID,COMPANY_ID,CREATE_DATETIME,...,TMP_GROUP_ID,'UPDATE',SYSDATE);
    commit;
elsif deleting then
        INSERT INTO AAA_LOG(PROJECT_ID,COMPANY_ID,CREATE_DATETIME,...,TMP_GROUP_ID,'UPDATE',SYSDATE);
    commit;
end if;

     EXCEPTION
      WHEN TOO_MANY_ROWS THEN
           INSERT INTO TAB_PUB_ERROR (userid, error, triname, tabfountain, tabend, edate)
                  VALUES(0,'TOO_MANY_ROWS','TRI_AAA','AAA','AAA',sysdate);
           COMMIT;
      WHEN NO_DATA_FOUND THEN
           INSERT INTO TAB_PUB_ERROR  (userid, error, triname, tabfountain, tabend, edate)
                  VALUES(0,'NO_DATA_FOUND','TRI_AAA','AAA','AAA',sysdate);
           COMMIT;
      WHEN OTHERS THEN
           err:=SUBSTR(SQLERRM(SQLCODE),1,100);
           INSERT INTO TAB_PUB_ERROR  (userid, error, triname, tabfountain, tabend, edate)
                  VALUES(0,err,'TRI_AAA','AAA','AAA',sysdate);
           COMMIT;
end;

分享到:
评论

相关推荐

    Oracle触发器备份表数据

    在Oracle中,使用触发器进行数据备份是一种常见的方法。以下是一段示例代码,展示了如何创建一个触发器来备份新插入的数据: ```sql CREATE OR REPLACE TRIGGER tr_info AFTER INSERT ON info FOR EACH ROW BEGIN ...

    JDBC创建触发器 JDBC存储过程 JDBC创建表 数据备份 java备份数据库/JAVA恢复数据、java导入sql脚本

    本主题将深入探讨利用JDBC进行触发器创建、存储过程执行、表的构建,以及数据库的备份和恢复操作。 首先,**JDBC创建触发器** 是一种数据库级别的事件响应机制,允许在特定数据库事件(如插入、更新或删除记录)...

    SQLServer 触发器 数据库进行数据备份

    触发器可以帮助我们实现复杂的业务逻辑,例如在数据更改时同步其他表,或者在此例中,用于实现数据备份。本文将深入探讨如何使用SQL Server触发器来自动备份数据。 首先,我们需要创建两个数据表。`test3`是主表,...

    利用SQLServer触发器实现表跟踪.pdf

    通过编写触发器代码,可以实现在原表的数据被删除、修改或新增时,将这些信息备份到日志表中。无论是通过程序还是直接在数据库界面对表进行操作,触发器都会记录下相应的日志信息。 文章还给出了一个具体的应用实例...

    一种基于触发器技术的SQL Server数据库实时备份方案.pdf

    具体地,实时备份方案使用双机备份方式,通过在数据库系统中部署特别设计的触发器程序,当数据发生变化时,触发器自动执行数据备份代码,同时记录数据变化前后的状态以及变化的详细信息。这样,当需要进行数据恢复时...

    触发器数据同步

    "触发器数据同步"这个主题涉及到如何通过触发器来确保数据库中的数据一致性与同步性。当多用户同时访问数据库并进行操作时,数据同步至关重要,以防止数据冲突和不一致。触发器可以在后台默默地执行一系列操作,比如...

    触发器使用教程和命名规范

    * 数据库的数据备份和恢复,例如在备份和恢复过程中执行触发器。 Oracle 触发器是一种强大的数据库控制机制,能够实现数据的一致性、正确性和规范性控制。同时,触发器也可以减少数据的重复和不一致,提高数据的...

    触发器的使用总结--分享经典

    例如,创建一个Update触发器,用于在更新`sales`表时,将删除的行备份到`sales_delbak`,新插入的行备份到`sales_insbak`。创建触发器的SQL语句如下: ```sql CREATE TRIGGER trig_test ON mrdb.dbo.[sales] FOR ...

    MYSQL触发器在PHP项目中用来做信息备份、恢复和清空

    - 在本案例中,使用TRUNCATE TABLE `employeebackup`可以快速清空备份表,释放内存,确保数据的彻底清除。 5. **PHP后台处理**: - PHP作为后端语言,通过Yii2框架的控制器方法(如`actionEmployeedel`)来处理...

    守护数据圣域:MySQL触发器在实现数据完整性中的应用

    使用触发器来维护参照完整性,即在数据发生变化时自动更新或删除相关数据以保持参照一致性。例如,当删除 `order_detail` 表中的一条记录时,可以通过触发器来更新 `product` 表中的库存: ```sql DELIMITER // ...

    图书管理系统触发器.pdf

    当用户对 `Library` 表进行更新操作时,触发器将被自动触发,如果更新了 `LibraryNo` 列,触发器将抛出错误,取消更新操作。 2. 触发器的应用场景 触发器可以应用于各种场景,例如: * 强制业务规则:例如,禁止...

    实验五、触发器设计(2学时).docx

    "触发器设计实验报告" 本实验的目的是设计触发器,了解触发器的概念和应用。触发器是一种特殊的存储过程,它被分配给某个特定的表,...同时,可以使用触发器来实现数据库的自动化操作,例如数据备份、数据分析等。

    数据库设计包括表、视图、触发器、存储过程、序列、索引等.doc

    触发器可以被用来实现数据的验证、数据的审核、数据的备份和恢复等等。在数据库设计中,触发器可以用来确保数据的正确性和一致性。 4. 存储过程(Stored Procedure) 存储过程是数据库中的一种预编译的程序,能够...

    SQL数据库触发器 SQL数据库触发器

    当使用下面的一种或多种数据修改操作在指定表中对数据进行修改时,触发器会生效:UPDATE、INSERT 或DELETE。触发器可以查询其它表,而且可以包含复杂的 SQL 语句。它们主要用于强制复杂的业务规则或要求。 触发器的...

    SQL数据备份软件.rar

    【定时备份】跟【增量备份】定时备份按照设定的时间点进行周期性备份,增量备份就厉害了,监听数据库表Row的变动进行备份,只对表定期做select count 处理,不进行其它触发器监听,不影响表的正常使用! 有了这个...

    触发器学习

    - DELETE触发器:在删除记录时激活,可以用于跟踪数据变化,防止数据丢失,或者在其他表中进行相应的删除操作。 2. DDL触发器: - 这类触发器主要用于监控对数据库结构的改变,例如创建新的表、视图、索引、用户...

    sysbase导入导出、备份还原、存储过程、触发器.doc

    本文将详细讨论在Sybase环境下如何执行数据的导入导出、备份与还原,以及如何创建和使用存储过程和触发器。 首先,让我们来看一下`sysbase`导入导出的过程。在Sybase中,我们可以使用`bcp`(Bulk Copy Program)...

Global site tag (gtag.js) - Google Analytics