oracle 11g实验五——触发器的使用
实验要求:
实验五 触发器的使用
实验目的
1、 理解触发器的概念、作用及分类;
2、 掌握触发器的创建、使用;
实验内容
1、 建立表orders:用于存储订单列表信息;表order_items:用于存储单个订单的详细信息。其结构分别为:
表1 orders表结构
|
字段名 |
字段类型 |
字段宽度 |
说明 |
|
id |
NUMBER |
20 |
订单编号(主键) |
|
order_date |
Date |
订单日期(非空) |
|
|
user_name |
VARCHAR2 |
10 |
客户名称(非空) |
|
city |
VARCHAR2 |
20 |
客户所在城市(默认沈阳) |
表2 order_items表结构
|
字段名 |
字段类型 |
字段宽度 |
说明 |
|
order_id |
NUMBER |
20 |
订单编号(主键) |
|
product_NAME |
VARCHAR2 |
20 |
产品名称(非空) |
|
quantity |
NUMBER |
4 |
数量(大于0,小于100) |
|
unit_price |
NUMBER |
(10,2) |
产品单价 |
2、 创建触发器,将用户对orders表的修改,保存到日志表(自己创建)中。
3、 测试触发器。
4、 创建触发器,限制只有scott用户可以修改表orders。
5、 测试触发器。
6、 删除触发器。
7、 创建用户签订订单详细信息视图view_user_order,包括用户名、订单号、商品名、数量、单价。
8、 创建触发器,实现更新视图,更新及表数据。
9、 测试触发器。
10、删除触发器。
实验答案:
--创建orders表
create table orders(
id NUMBER(20) PRIMARY KEY NOT NULL,
order_date date not null,
user_name varchar2(10) not null,
city varchar2(20) default '沈阳'
); --创建order_items表
create table order_items(
order_id number(20) primary key,
product_NAME varchar2(20) not null,
quantity number(4) check(quantity BETWEEN 0 AND 100),
unit_price number(10,2)
); --2、 创建触发器,将用户对orders表的修改,保存到日志表(自己创建)中。
--日志表
CREATE TABLE T_LOG
(
RID VARCHAR2(32),
NAME VARCHAR2(1000),
RQ DATE DEFAULT sysdate,
OLDVALUE VARCHAR2(255),
NEWVALUE VARCHAR2(255)
);
--目标表
create table orders(
id NUMBER(20) PRIMARY KEY NOT NULL,
order_date date not null,
user_name varchar2(10) not null,
city varchar2(20) default '沈阳'
); CREATE OR REPLACE TRIGGER order_loggin
AFTER UPDATE
ON orders
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
DECLARE
BEGIN
if :new.city<>:old.city
then
insert into T_LOG (rid,name,newvalue,oldvalue)
values(:new.id,'城市', :new.city , :old.city);
end if;
if :new.user_name<>:old.user_name
then
insert into t_log (rid,name,newvalue,oldvalue)
values(:new.id,'姓名',:new.user_name,:old.user_name);
end if;
if :new.order_date<>:old.order_date
then
insert into t_log (rid,name,newvalue,oldvalue)
values(:new.id,'订单日期',:new.order_date,:old.order_date);
end if;
END order_loggin; --3、 测试触发器。
update orders set user_name='213456' where id='1'; SELECT * from t_log; --4、 创建触发器,限制只有scott用户可以修改表orders。
create or replace
TRIGGER alter_order
BEFORE INSERT or UPDATE or DELETE
ON orders
declare
user_name VARCHAR2(30);
BEGIN
select user into user_name FROM dual;
if(lower(user_name)<>'scott') THEN RAISE_APPLICATION_ERROR(-20001,'改用户不能修改orders表');
END IF;
END alter_order; --5、 测试触发器。 update orders set user_name='111' where id='1'; --6、 删除触发器。 DROP TRIGGER alter_order; create table orders(
id NUMBER(20) identified(1,1) PRIMARY KEY NOT NULL,
order_date date not null ,
user_name varchar2(10) not null,
city varchar2(20) default '沈阳'
); create table order_items(
order_id number(20) primary key,
product_NAME varchar2(20) not null,
quantity number(4) check(quantity BETWEEN 0 AND 100),
unit_price number(10,2)
);
--7、 创建用户签订订单详细信息视图view_user_order,包括用户名、订单号、商品名、数量、单价。
create or replace VIEW view_user_order
as select user_name,order_id,product_NAME,quantity,unit_price from order_items join orders on(order_items.order_id=orders.id); --测试
SELECT * FROM view_user_order;
--8、 创建触发器,实现更新视图,及更新表数据。 create or replace
TRIGGER view_user_order_trigger
INSTEAD OF
INSERT ON view_user_order
FOR EACH ROW
BEGIN
INSERT INTO orders(id,user_name) values(:new.order_id,:new.user_name);
INSERT INTO order_items(order_id, product_NAME, quantity,unit_price)
VALUES(:new.order_id, :new.product_NAME, :new.quantity, :new.unit_price);
END view_user_order_trigger; --9、 测试触发器。 insert into view_user_order values('12310',4,'电话',20,1500);
insert into view_user_order values('12311',5,'电话',20,1500);
--10、 删除触发器。 DROP TRIGGER view_user_order_trigger;
oracle 11g实验五——触发器的使用的更多相关文章
- SQL SERVER 2008向ORACLE 11G迁移示例
来源于:http://www.cnblogs.com/hiizsk/ 由SQL SERVER 2008向ORACLE 11G迁移过程记录之一-表 使用Oracle Sql Developer将SQL ...
- PowerDesginer 生成的Oracle 11g 组合触发器代码编译错误(29): PLS-00103
问题描述: 采用PowerDesigner15针对Oracle 11g 创建物理数据模型,想实现一个字段的自增,采用如下步骤: 1.创建序列,命名为Sequence_1; 2.在自增字段编辑窗口中,选 ...
- Oracle 11g新特性
文章转自网络 Oracle 11g于2007年7月11日美国东部时间11时(北京时间11日22时)正式发布,11g是甲骨文公司30年来发布的最重要的数据库版本,根据用户的需求实现了信息生命周期管理(I ...
- ORACLE 11G R2 RAC classical install OGG12.1(LINUX) 经典抽取模式单项同步配置OGG12.1
博文结构图如下: 一.环境描述以及注意事项 1.1 环境简介 IP 系统 Oracle版本 OGG版本 源端 172.16.10.16/36 RHEL6.5 oracle11204 12.1 目标端 ...
- oracle 11g 分区表创建(自动按年、月、日分区)
前言:工作中有一张表一年会增长100多万的数据,量虽然不大,可是表字段多,所以一年下来也会达到 1G,而且只增不改,故考虑使用分区表来提高查询性能,提高维护性. oracle 11g 支持自动分区,不 ...
- 64位Oracle 11g 使用PL/SQL
Oracle 11g和PL/SQL安装完后,发现打开PL/SQL并不能连接Oracle数据库! [第一回合]完败! 先是在网上找解决方法,说是需要使用Net Configuration Assista ...
- 数据库系统入门 | Oracle Linux上部署Oracle 11g服务,并实现SSH远程登录管理
文章目录 写在前面 一.实验内容 二.实验前期准备 1.软件目录 2.准备一些配置文件.脚本文件 三.实验方案(具体步骤) (一)在虚拟机上安装Oracle Linux (二)在Linux上安装Ora ...
- Linux 6.x 下Oracle 11g R2 安装配置
Oracle 11g R2 数据库安装硬件配置要求: 最小内存 1 GB of RAM 虚拟内存容量,这个oracle也有要求,不用担心此时的swap分区不够oracle的要求 .虚拟内存swap如何 ...
- 【Oracle 集群】Oracle 11G RAC教程之集群安装(七)
Oracle 11G RAC集群安装(七) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总. ...
随机推荐
- FBReaderJ 编译Jni
最近要做一个电子书项目用到FBReaderJ 第一步,也是最难的一步,要编译他的Jni 文件,对于android开发还是小白的我,只能说难!好难!非常难!,于是乎百度了一下,找到几篇有价值性的文章 第 ...
- ios通知-kvo
// KVC: Key Value Coding, 常见作用:给模型属性赋值 // KVO: Key Value Observing, 常用作用:监听模型属性值的改变 // // ViewCon ...
- bootstrap在iis中发布后无法看到图标,字体样式
因为框架使用了字体文件来显示矢量的图标,为了能在IIS上正常显示图标,可以通过增加iis的MIME-TYPE来支持图标字体文件:
- 初识 Lucene
Lucene是一个信息检索工具库,而不是一个完整的搜索程序 搜索程序 Lucene索引核心类 Lucene索引核心类: Document: 文档对象代表一些域(field)的集合 Field: 每个文 ...
- mysql命令行方式添加用户及设置权限
以前总是喜欢通过phpmyadmin去添加用户和数据库,这次装完系统后,配置了一大堆东东,实在不想安装phpmyadmin了,就通过命令行方式创建了数据库和设置权限,记录一下,免得以后总是百度 关键步 ...
- /lib /usr/lib /usr/local/lib 区别
简单说,/lib是内核级的,/usr/lib是系统级的,/usr/local/lib是用户级的. /lib/ — 包含许多被 /bin/ 和 /sbin/ 中的程序使用的库文件.目录 /usr/lib ...
- 读jQuery官方文档:样式
样式 使用jQuery,无论是设置或者获取元素样式都十分简便. // 支持驼峰式和分割线式,两种方式等价(原生JavaScript只支持驼峰式) $('h1').css('fontSize'); $( ...
- div中的img垂直居中
<html> <head> <style type="text/css"> .imgDiv { overflow: hidden; displa ...
- 【转】Myeclipse8.5 反编译插件 jad 安装
[转]Myeclipse8.5 反编译插件 jad 安装 准备工作 下载jad.exe文件下载window版本:http://varaneckas.com/jad/ 下载jadeclipse插件:ht ...
- Unity3D之Ugui 制作弹框
创建一个UI控件. 这里通过按钮的点击取控制弹框的显示或者隐藏.给按钮Button绑定一个脚本. 将Panel初始化设置为隐藏.就可以实现了. using UnityEngine; using Sys ...