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基础知识学习的汇总. ...
随机推荐
- 03---JavaScript基础整理
一.概述: Netscape开发的一种基于对象和事件驱动的脚本语言. 被设计用来想HTML页面添加交互行为. 无需编译,可由浏 ...
- iOS开发——新特性OC篇&Swift 2.0新特性
Swift 2.0新特性 转眼间,Swift已经一岁多了,这门新鲜.语法时尚.类型安全.执行速度更快的语言已经渐渐的深入广大开发者的心.我同样也是非常喜爱这门新的编程语言. 今年6月,一年一度 ...
- Storyboards vs NIB vs Code 大辩论
前言 做iOS开发的童鞋都应该会纠结一个问题,那就是在做开发的时候是使用StoryBoard还是使用Nibs又或者是Code(纯代码流)呢?笔者也非常纠结这个问题,今天碰巧在raywenderlich ...
- How to use BMW Multi Tool 7.3 to replace lost key for BMW X1
BMW Multi Tool 7.3 version is a high quality auto key programmer that supports CAS 1, CAS2, CAS3, CA ...
- 使用webView制作浏览器
xml文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:t ...
- 基于Selenium2+Java的UI自动化(2) - 启动浏览器
一.准备工作 我们常用的浏览器主要有三个:chrome.Firefox.IE:其中chrome 和 IE 需要下载驱动程序,才能启动浏览器,注意驱动程序有32位和64位两种. 另外:如何查看本机的浏览 ...
- 快递查询api(多接口方案)
/** 本环境使用php+smarty,结合两种快递api调取快递数据 * 说明,先快递鸟调取数据,失败后再调取快递网的数据* 快递鸟 http://www.kdniao.com 快递网 http:/ ...
- Centos 7安装gvim
sudo yum install vim-X11 download vimrc from github
- 可发布指定的ASP.NET页面的插件:LimusicAddin
涉及到的技术点 VS插件开发.推荐阅读:Visual Studio 2008 可扩展性开发 asp.net 预编译.使用aspnet_comlier.exe(在目录:C:\Windows\Micros ...
- hdoj1285 拓扑排序
题目链接 分析: 很明显,一看就是拓扑排序. 看似简单, 暗藏武器啊. 第一次做的时候一边拓扑排序一边标记他们的深度, 例如题中给的例子 {1 2:2 3:4 3 }.1的深度为1. 2.4的深度为2 ...