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基础知识学习的汇总. ...
随机推荐
- valgrind 生成mysqld调用图之 select now()跟踪
1.mysqld起动方式: 1.mysqld以root用户运行 valgrind --tool=callgrind --separate-threads=yes --trace-children=y ...
- Java自学成长路线(转载)
JAVA自学之路 一:学会选择 决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机.嵌入式.游戏.3G.测试等. JAVA是一种平台,也是一种程序设计语言,如何学好程序设计不仅 ...
- global 用法
<?php//$GLOBALS['he']="hechunhuae";function Test(){ //global $he; $GLOBALS['he']=" ...
- qt-vs-addin-版本支持
qt-vs-addin-1.2.0-opensource.exe VS200X qt-vs-addin-1.2.1-opensource.exe VS200X qt-v ...
- 修改UILabel的行间距
在iOS开发中 有时候为了调整一些UI效果 我们需要调整UILabel之间的行间距: contentLabel.text:label上显示的文字内容; 5:label行间距; contentLab ...
- 关于Git的暂存区这个概念的理解.
Git中的暂存区成为stage或者是index.可以理解成一个"提交任务".Git暂存区是Git最成功的设计之一,但是也是最难理解的. 暂存区是一个介于工作区和版本库的中间状态.当 ...
- Time complexity analysis of algorithms
时间复杂性的计算一般而言,较小的问题所需要的运行时间通常要比较大的问题所需要的时间少.设一个程序P所占用的时间为T,则 T(P)=编译时间+运行时间. 编译时间与实例特征是无关的,且可假设一个编译过的 ...
- PHP Fatal error: Cannot pass parameter 2 by reference
PHP Fatal error: Cannot pass parameter 2 by reference in 这个错误的意思是:不能按引用传递第2个参数 我的理解是: 方法的第2个参数 需要传递 ...
- 电脑小白学习软件开发-C#语言基础之循环重点讲解,习题
写代码也要读书,爱全栈,更爱生活.每日更新原创IT编程技术及日常实用视频. 我们的目标是:玩得转服务器Web开发,搞得懂移动端,电脑客户端更是不在话下. 本教程是基础教程,适合任何有志于学习软件开发的 ...
- 用友NC V6.3打造集团企业高效信息平台
近年来,随着互联网快速发展,信息化管理的应用也越来越普及,信息化建设已经深入到很多企业的核心业务,而且为了确保业务稳定.可靠并快速.有效地 开展,企业经常会运用多个信息系统进行辅助支撑,但是,许多企业 ...