一。触发器实现 crud两表同步。

建表:

create table t1 (
   ID                   INTEGER                        not null,
   UserName            VARCHAR(30)                     not null,
   PassWord            VARCHAR(20)                     not null,
   constraint PK_User_Info primary key (ID)
);

create table t2 (
   ID                   INTEGER                         not null,
   UserName            VARCHAR(30)                     not null,
   Email            VARCHAR(20)                     not null,
   Phone            VARCHAR(20)                     not null,
   constraint PK_User_Info_temp primary key (ID)
);

触发器写法:

create or replace trigger tri_t1_t2 after insert or update or delete
on t1 for each row
declare
   empno_remaining EXCEPTION;
   PRAGMA EXCEPTION_INIT(empno_remaining, -1);
   /* -1 是违反唯一约束条件的错误代码 * 
begin
if inserting then
    insert into t2 values(:NEW.ID,:NEW.UserName,:NEW.PassWord);
elsif updating then
    update t2 set ID=:NEW.ID,UserName=:NEW.UserName where id=:OLD.id;
elsif deleting then
    delete from t2 where id=:OLD.id;
end if;
exception
  WHEN empno_remaining THEN
      DBMS_OUTPUT.PUT_LINE('违反数据完整性约束!');
  WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE(SQLCODE|| '---' ||SQLERRM);
      //SQLCODE 和SQLERRM 是两个Oracle函数,返回异常信息。或者用下面的方法来处理(服务器返回异常在客户端显示)
      //raise_application_error(-20001, '是另外的错误!');
      //注意此方法的用法:第一个参数-20000~-20999,第二个自定义字符串(2k以内)。
end;

2。插入一条记录,这条数据要作为判断能否插入的条件,就要用到临时表。
(例如往一个表中插入百分比,要满足所有数据的百分比之和小于100)
如下例:要求插入单项成绩权重和小于100:
(1).临时表:tmp
create global temporary table tmp(STDSCOREDETAIL_ID VARCHAR2(32),
DXMC VARCHAR2(20),DXQZ NUMBER(5,2),DXDF VARCHAR2(10),SCS_ID VARCHAR2(32),DXCJ NUMBER(5,2))
on commit delete rows;

(2).触发器:tri_jw_stdscoredetail_1
create or replace trigger tri_jw_stdscoredetail_1 before insert or update
on jw_stdscoredetail
for each row

Declare
qz Number:=0;

begin
     Insert into tmp values(:new.STDSCOREDETAIL_ID,:new.DXMC,:new.DXQZ,:new.DXDF,:new.SCS_ID,:new.DXCJ);
     select sum(t.dxqz) into qz from tmp t where t.scs_id=:new.SCS_ID;
     if(qz>100) then
        Raise_application_error(-20001,'数据出错,保存数据时单项权重总和大于100%');
     end if;
    
end;

2。插入一条记录,这条数据要作为判断能否插入的条件,就要用到临时表。
(例如往一个表中插入百分比,要满足所有数据的百分比之和小于100)
如下例:要求插入单项成绩权重和小于100:
(1).临时表:tmp
create global temporary table tmp(STDSCOREDETAIL_ID VARCHAR2(32),
DXMC VARCHAR2(20),DXQZ NUMBER(5,2),DXDF VARCHAR2(10),SCS_ID VARCHAR2(32),DXCJ NUMBER(5,2))
on commit delete rows;

(2).触发器:tri_jw_stdscoredetail_1
create or replace trigger tri_jw_stdscoredetail_1 before insert or update
on jw_stdscoredetail
for each row

Declare
qz Number:=0;

begin
     Insert into tmp values(:new.STDSCOREDETAIL_ID,:new.DXMC,:new.DXQZ,:new.DXDF,:new.SCS_ID,:new.DXCJ);
     select sum(t.dxqz) into qz from tmp t where t.scs_id=:new.SCS_ID;
     if(qz>100) then
        Raise_application_error(-20001,'数据出错,保存数据时单项权重总和大于100%');
     end if;
    
end;

转载于:https://www.cnblogs.com/xh6210/archive/2012/09/03/2669353.html

Oracle学习笔记之触发器相关推荐

  1. oracle 学习笔记之触发器

    说明 数据库触发器是一个与表相关联的.存储的PL/SQL程序. 每当一个特定的数据操作语句(Insert,update,delete)在指定的表上发出时,Oracle自己主动地运行触发器中定义的语句序 ...

  2. Oracle学习笔记十三 触发器

    2019独角兽企业重金招聘Python工程师标准>>> 简介 触发器是当特定事件出现时自动执行的存储过程,特定事件可以是执行更新的DML语句和DDL语句,触发器不能被显式调用. 触发 ...

  3. 在大量数据迁移期间oracle学习笔记

    在数据迁移期间oracle学习笔记 0主键(自增) 1用户代码 2区域代码 3承保公司代码 4理赔编码 5投保确认码 6案件状态 7案件进展 8重开案件进展 9转换后案件状态 需求分析: 1.根据上述 ...

  4. oracle:oracle学习笔记(四)循环、光标、异常、瀑布模型

    oracle学习笔记:循环.光标.异常 文章目录 打印Hello World 定义基本变量 引用型变量(单行)` my_name emp.ename%type ` 记录型变量(多行) `emp_rec ...

  5. Oracle学习笔记---(一)

    Oracle学习笔记---(一) 一 1.Oracle简介     Oracle是以高级结构化查询语言(SQL)为基础的大型关系数据库:是一个对象关系数据库管理系统(ORDBMS).它提供了关系数据库 ...

  6. oracle 权限问题9017,[数据库]oracle学习笔记(一)用户管理_星空网

    oracle学习笔记(一)用户管理 2014-04-13 0 1 --oracle学习第一天 2 --连接 @后面连接数据库实例,具体连接到那个数据库 3 conn scott/tiger@MYORA ...

  7. 【Oracle】Oracle学习笔记

    [Oracle]Oracle学习笔记 目录 [Oracle]Oracle学习笔记 P1.Oracle数据库的安装和配置 P2.Oracle数据库管理 P3-0.初步SQL P3-1.基本SQL SEL ...

  8. oracle学习笔记 Oracle体系结构概述

    oracle学习笔记 Oracle体系结构概述 从这节开始,开始讲oracle数据库体系结构. 首先从总体上,从概述上把oracle整体的体系结构讲一下, 然后接下来的时间我们会一块一块的将oracl ...

  9. Oracle学习笔记 字符集概述

    Oracle 学习笔记 字符集概述 这节课开始讲oracle里面的字符集 偏重于原理和简单的一些判断以及实现 字符集它涉及到很多的东西 比如建库和操作系统环境 这节课把字符集的原理性的东西以及常见的操 ...

  10. oracle学习笔记 oracle软件安装准备工作 第一部分 环境准备

    oracle学习笔记   oracle软件安装准备工作  第一部分 环境准备 这节课对初学者来说内容较多,我把它分成了三篇. 即使这样也不可能把每个可能遇到的问题都说到,如果遇到没说到的问题自己上网搜 ...

最新文章

  1. Js Chars应用
  2. JAVA_IO流四大家族(2)
  3. 标准缺失成发展阻碍 智能家居普及之路任重而道远
  4. 算法笔记 1 31 chapter4
  5. java前端长连接框架_Java如何实现长连接
  6. JavaWeb 安全问题及解决方案
  7. 【渝粤教育】 国家开放大学2020年春季 3956★汽车故障诊断技术 参考试题
  8. javascript学习笔记(十五) 间歇调用和超时调用
  9. mysql管理数据 并上传至云端_西部数码网站管理助手创建、导入恢复、导出备份mysql数据库...
  10. 2017 让机器给我们干活
  11. 64行代码实现简单人脸识别
  12. vue 百度地图中文文档
  13. 上海满五非唯一,非普通性住房计算
  14. 树莓派4B + USB启动(外置硬盘Or U盘)ubuntu server 镜像
  15. POI 在 word中 画图 以及图例刷新
  16. RAID磁盘列阵介绍
  17. Leetcode 击碎气球的最大分数
  18. 如何注册成为腾讯QQ互联个人开发者
  19. Spring Cloud - 注册中心
  20. 易周金融观点:遏制NFT金融化等打下监管良基

热门文章

  1. sublime text 3的组合快捷键汇总
  2. almost a hero 差不多英雄 攻略
  3. Java 11 的新特性(上)
  4. 深入理解JUnit 5的扩展模型
  5. 数据库执行自定义函数报错问题记录
  6. String和StringBuffer与StringBuilder的区别
  7. 100万并发连接服务器笔记之Java Netty处理1M连接会怎么样
  8. Oracle 10g中UNDO数据的作用及UNDO表空间的操作详解
  9. windows 2003下配置IIS6为iis5方式的隔离模式运行
  10. iOS 处理后台返回的json(或NSDictionary)形式字符串