Oracle学习笔记之触发器
一。触发器实现 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学习笔记之触发器相关推荐
- oracle 学习笔记之触发器
说明 数据库触发器是一个与表相关联的.存储的PL/SQL程序. 每当一个特定的数据操作语句(Insert,update,delete)在指定的表上发出时,Oracle自己主动地运行触发器中定义的语句序 ...
- Oracle学习笔记十三 触发器
2019独角兽企业重金招聘Python工程师标准>>> 简介 触发器是当特定事件出现时自动执行的存储过程,特定事件可以是执行更新的DML语句和DDL语句,触发器不能被显式调用. 触发 ...
- 在大量数据迁移期间oracle学习笔记
在数据迁移期间oracle学习笔记 0主键(自增) 1用户代码 2区域代码 3承保公司代码 4理赔编码 5投保确认码 6案件状态 7案件进展 8重开案件进展 9转换后案件状态 需求分析: 1.根据上述 ...
- oracle:oracle学习笔记(四)循环、光标、异常、瀑布模型
oracle学习笔记:循环.光标.异常 文章目录 打印Hello World 定义基本变量 引用型变量(单行)` my_name emp.ename%type ` 记录型变量(多行) `emp_rec ...
- Oracle学习笔记---(一)
Oracle学习笔记---(一) 一 1.Oracle简介 Oracle是以高级结构化查询语言(SQL)为基础的大型关系数据库:是一个对象关系数据库管理系统(ORDBMS).它提供了关系数据库 ...
- oracle 权限问题9017,[数据库]oracle学习笔记(一)用户管理_星空网
oracle学习笔记(一)用户管理 2014-04-13 0 1 --oracle学习第一天 2 --连接 @后面连接数据库实例,具体连接到那个数据库 3 conn scott/tiger@MYORA ...
- 【Oracle】Oracle学习笔记
[Oracle]Oracle学习笔记 目录 [Oracle]Oracle学习笔记 P1.Oracle数据库的安装和配置 P2.Oracle数据库管理 P3-0.初步SQL P3-1.基本SQL SEL ...
- oracle学习笔记 Oracle体系结构概述
oracle学习笔记 Oracle体系结构概述 从这节开始,开始讲oracle数据库体系结构. 首先从总体上,从概述上把oracle整体的体系结构讲一下, 然后接下来的时间我们会一块一块的将oracl ...
- Oracle学习笔记 字符集概述
Oracle 学习笔记 字符集概述 这节课开始讲oracle里面的字符集 偏重于原理和简单的一些判断以及实现 字符集它涉及到很多的东西 比如建库和操作系统环境 这节课把字符集的原理性的东西以及常见的操 ...
- oracle学习笔记 oracle软件安装准备工作 第一部分 环境准备
oracle学习笔记 oracle软件安装准备工作 第一部分 环境准备 这节课对初学者来说内容较多,我把它分成了三篇. 即使这样也不可能把每个可能遇到的问题都说到,如果遇到没说到的问题自己上网搜 ...
最新文章
- Js Chars应用
- JAVA_IO流四大家族(2)
- 标准缺失成发展阻碍 智能家居普及之路任重而道远
- 算法笔记 1 31 chapter4
- java前端长连接框架_Java如何实现长连接
- JavaWeb 安全问题及解决方案
- 【渝粤教育】 国家开放大学2020年春季 3956★汽车故障诊断技术 参考试题
- javascript学习笔记(十五) 间歇调用和超时调用
- mysql管理数据 并上传至云端_西部数码网站管理助手创建、导入恢复、导出备份mysql数据库...
- 2017 让机器给我们干活
- 64行代码实现简单人脸识别
- vue 百度地图中文文档
- 上海满五非唯一,非普通性住房计算
- 树莓派4B + USB启动(外置硬盘Or U盘)ubuntu server 镜像
- POI 在 word中 画图 以及图例刷新
- RAID磁盘列阵介绍
- Leetcode 击碎气球的最大分数
- 如何注册成为腾讯QQ互联个人开发者
- Spring Cloud - 注册中心
- 易周金融观点:遏制NFT金融化等打下监管良基