- 浏览: 1023135 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (529)
- 服务器 (8)
- jsp (1)
- java (6)
- AIX (1)
- solaris (3)
- linux学习 (53)
- javaScript (2)
- hibernate (1)
- 数据库 (74)
- sql语句 (8)
- oracle 学习 (75)
- oracle 案例 (42)
- oracle 管理 (42)
- Oracle RAC (27)
- oracle data guard (12)
- oracle 参数讲解 (14)
- Oracle 字符集 (8)
- oracle性能调优 (24)
- oracle备份与恢复 (12)
- oracle Tablespace (9)
- oracle性能诊断艺术 (1)
- oracle 11g学习 (5)
- oracle streams (1)
- oracle upgrade and downgrade (4)
- db2学习 (13)
- db2命令学习 (2)
- mysql (28)
- sql server (30)
- sql server 2008 (0)
- 工具 (10)
- 操作系统 (3)
- c++ (1)
- stock (1)
- 生活 (5)
- HADOOP (2)
最新评论
-
massjcy:
...
如何将ubuntu文件夹中文名改为英文 -
skypiea:
谢谢。。。
终于解决了。。。
Oracle 10.2.0.4(5)EM不能启动的解决方案(Patch 8350262) -
qwe_rt:
引用vi /etc/sysconfig/network 请问 ...
Linux操作系统下配置静态IP上网 -
liuqiang:
sudo killall -9 apache2
ps 和 kill 命令详解 -
dazuiba:
引用*绝杀 kill -9 PID 当使用此命令时,一定要通过 ...
ps 和 kill 命令详解
一篇关于oracle trigger的实践代码
sql 代码
- --[6]// Oracle Trigger
- ---------------------------------------------------------------------------------------------//
- --实例1------------------------
- --创建触发器,当用户对test表执行DML语句时,将相关信息记录到日志表
- --创建测试表
- CREATE TABLE test
- (
- t_id NUMBER(4),
- t_name VARCHAR2(20),
- t_age NUMBER(2),
- t_sex CHAR
- );
- --创建记录测试表
- CREATE TABLE test_log
- (
- l_user VARCHAR2(15),
- l_type VARCHAR2(15),
- l_date VARCHAR2(30)
- );
- --创建触发器
- CREATE OR REPLACE TRIGGER test_trigger
- AFTER DELETE OR INSERT OR UPDATE ON test
- DECLARE
- v_type test_log.l_type%TYPE;
- BEGIN
- IF INSERTING THEN --INSERT触发
- v_type := 'INSERT';
- DBMS_OUTPUT.PUT_LINE('记录已经成功插入,并已记录到日志');
- ELSIF UPDATING THEN --UPDATE触发
- v_type := 'UPDATE';
- DBMS_OUTPUT.PUT_LINE('记录已经成功更新,并已记录到日志');
- ELSIF DELETING THEN
- v_type := 'DELETE';
- DBMS_OUTPUT.PUT_LINE('记录已经成功删除,并已记录到日志');
- END IF;
- INSERT INTO test_log VALUES(user,v_type,
- TO_CHAR(sysdate,'yyyy-mm-dd hh24:mi:ss'));
- END;
- /
- --下面我们来分别执行DML语句
- INSERT INTO test VALUES(101,'zhao',22,'M');
- UPDATE test SET t_age = 30 WHERE t_id = 101;
- DELETE test WHERE t_id = 101;
- --然后查看效果
- SELECT * FROM test;
- SELECT * FROM test_log;
- --实例2------------------------
- --创建触发器,它将映射emp表中每个部门的总人数和总工资
- --创建映射表
- CREATE TABLE dept_sal
- AS
- SELECT deptno,COUNT(empno) AS total_emp,SUM(sal) AS total_sal FROM emp GROUP BY deptno;
- DESC dept_sal;
- --创建触发器
- CREATE OR REPLACE TRIGGER emp_info
- AFTER INSERT OR UPDATE OR DELETE ON emp
- DECLARE
- CURSOR cur_emp IS
- SELECT deptno,COUNT(empno) AS total_emp,SUM(sal) AS total_sal FROM emp GROUP BY deptno;
- BEGIN
- DELETE dept_sal; --触发时首先删除映射表信息
- FOR v_emp IN cur_emp LOOP
- --DBMS_OUTPUT.PUT_LINE(v_emp.deptno || v_emp.total_emp || v_emp.total_sal);
- --插入数据
- INSERT INTO dept_sal
- VALUES(v_emp.deptno,v_emp.total_emp,v_emp.total_sal);
- END LOOP;
- END;
- /
- --对emp表进行DML操作
- INSERT INTO emp(empno,deptno,sal) VALUES('123','10',10000);
- SELECT * FROM dept_sal;
- DELETE EMP WHERE empno=123;
- SELECT * FROM dept_sal;
- --实例3------------------------
- --创建触发器,它记录表的删除数据
- --创建表
- CREATE TABLE employee
- (
- id VARCHAR2(4) NOT NULL,
- name VARCHAR2(15) NOT NULL,
- age NUMBER(2) NOT NULL,
- sex CHAR NOT NULL
- );
- DESC employee;
- --插入数据
- INSERT INTO employee VALUES('e101','zhao',23,'M');
- INSERT INTO employee VALUES('e102','jian',21,'F');
- --创建记录表
- CREATE TABLE old_employee AS
- SELECT * FROM employee;
- DESC old_employee;
- --创建触发器
- CREATE OR REPLACE TRIGGER tig_old_emp
- AFTER DELETE ON employee --
- FOR EACH ROW --语句级触发,即每一行触发一次
- BEGIN
- INSERT INTO old_employee
- VALUES(:old.id,:old.name,:old.age,:old.sex); --:old代表旧值
- END;
- /
- --下面进行测试
- DELETE employee;
- SELECT * FROM old_employee;
- --实例4------------------------
- --创建触发器,利用视图插入数据
- --创建表
- CREATE TABLE tab1 (tid NUMBER(4) PRIMARY KEY,tname VARCHAR2(20),tage NUMBER(2));
- CREATE TABLE tab2 (tid NUMBER(4),ttel VARCHAR2(15),tadr VARCHAR2(30));
- --插入数据
- INSERT INTO tab1 VALUES(101,'zhao',22);
- INSERT INTO tab1 VALUES(102,'yang',20);
- INSERT INTO tab2 VALUES(101,'13761512841','AnHuiSuZhou');
- INSERT INTO tab2 VALUES(102,'13563258514','AnHuiSuZhou');
- --创建视图连接两张表
- CREATE VIEW tab_view AS
- SELECT tab1.tid,tname,ttel,tadr FROM tab1,tab2
- WHERE tab1.tid = tab2.tid;
- --创建触发器
- CREATE OR REPLACE TRIGGER tab_trigger
- INSTEAD OF INSERT ON tab_view
- BEGIN
- INSERT INTO tab1(tid,tname) VALUES(:new.tid,:new.tname);
- INSERT INTO tab2(ttel,tadr) VALUES(:new.ttel,:new.tadr);
- END;
- /
- --现在就可以利用视图插入数据
- INSERT INTO tab_view VALUES(105,'zhaoyang','13886681288','beijing');
- --查看效果
- SELECT * FROM tab_view;
- --实例5------------------------
- --创建触发器,比较emp表中更新的工资
- CREATE OR REPLACE TRIGGER sal_emp
- BEFORE UPDATE ON emp
- FOR EACH ROW
- BEGIN
- IF :OLD.sal > :NEW.sal THEN
- DBMS_OUTPUT.PUT_LINE('工资减少');
- ELSIF :OLD.sal < :NEW.sal THEN
- DBMS_OUTPUT.PUT_LINE('工资增加');
- ELSE
- DBMS_OUTPUT.PUT_LINE('工资未作任何变动');
- END IF;
- DBMS_OUTPUT.PUT_LINE('更新前工资 :' || :OLD.sal);
- DBMS_OUTPUT.PUT_LINE('更新后工资 :' || :NEW.sal);
- END;
- /
- --执行UPDATE查看效果
- UPDATE emp SET sal = 3000 WHERE empno = '7788';
- --实例6------------------------
- --创建触发器,将操作CREATE、DROP存储在log_info表
- --创建表
- CREATE TABLE log_info
- (
- manager_user VARCHAR2(15),
- manager_date VARCHAR2(15),
- manager_type VARCHAR2(15),
- obj_name VARCHAR2(15),
- obj_type VARCHAR2(15)
- );
- --创建触发器
- CREATE OR REPLACE TRIGGER trig_log_info
- AFTER CREATE OR DROP ON SCHEMA
- BEGIN
- INSERT INTO log_info
- VALUES(USER,SYSDATE,SYS.DICTIONARY_OBJ_NAME,SYS.DICTIONARY_OBJ_OWNER,
- SYS.DICTIONARY_OBJ_TYPE);
- END;
- /
- --测试语句
- CREATE TABLE a(id NUMBER);
- CREATE TYPE aa AS OBJECT(id NUMBER);
- /
- DROP TABLE a;
- DROP TYPE aa;
- --查看效果
- SELECT * FROM log_info;
- --相关数据字典-----------------------------------------------------//
- SELECT * FROM USER_TRIGGERS;
- SELECT * FROM ALL_TRIGGERS;
- SELECT * FROM DBA_TRIGGERS; --必须以DBA身份登陆才能使用此数据字典
- --启用和禁用
- ALTER TRIGGER trigger_name DISABLE;
- ALTER TRIGGER trigger_name ENABLE;
- ------------------------------------------------------------------------------------------End//
发表评论
-
sqlldr总结参数介绍
2012-06-28 14:29 22832有效的关键字: userid -- ORACLE use ... -
11gR2新特性:STANDBY_MAX_DATA_DELAY
2011-12-27 11:18 1221Active Data Guard 是 Oracle 11g ... -
Linux下用OCCI或OCI连接Oracle
2011-07-26 12:00 2907首先,去oracle官网下载C ... -
Oracle Mutex实现机制
2011-05-18 23:43 1072我们都知道Latch是Oracle ... -
local_listener参数作用
2011-05-10 17:19 1931pmon只会动态注册port等于1521的监听,否则 ... -
oracle伪列 rowid和rownum
2011-03-23 10:00 3541整理ROWID一 一,什么是伪列RowID?1,首先是一种数 ... -
Oracle10gR2 主备自动切换之客户端Failover配置
2011-01-20 10:32 9541. 主库检查和设置假设新增的服务名为ORCL_TAF.LK. ... -
Oracle10g配置Dataguard的相关参数解释
2011-01-20 10:24 1271参考自 http://space.itpub.ne ... -
wrap加密oracle包
2011-01-19 11:52 1299大家都知道oracle的很多系统包是没法看它的源码的,orac ... -
利用hcheck检查数据字典一致性状态
2011-01-17 17:42 1820利用hcheck可以检查oracle数据字典的一致性状态,主要 ... -
插入相同的数据量普通表和临时表产生的redo对比
2011-01-17 16:08 989往临时表里插入相同量 ... -
Database Link与GLOBAL_NAMES参数
2011-01-12 13:36 1034当GLOBAL_NAMES参数设置为TRUE时,使用DATAB ... -
Oracle Streams学习二(清除流配置)
2011-01-09 23:34 1183在完成streams部署之后,如果需要重新配置或舍弃配置,可以 ... -
red hat enterprise 下完全删除oracle 数据库
2011-01-05 01:28 1759步骤 1 以oracle用户登录主、备节点。步骤 2 ... -
Oracle常用dump命令
2010-12-20 00:31 836Oracle常用dump命令,记录一下备查。 一.M ... -
oracle执行DML(事物过程)的深入研究(二)
2010-12-14 15:02 1542接上一节的 oracle执行DML(事物过程)的深入研究(一) ... -
oracle执行DML(事物过程)的深入研究(一)
2010-12-14 10:26 2805用户所执行 DML (即执行事务)操作在 Oracle 内部按 ... -
Oracle基本数据类型存储格式研究(二)—数字类型
2010-12-14 00:35 1474数字类型包含number,intege ... -
Oracle基本数据类型存储格式研究(一)—字符类型
2010-12-13 23:32 11741.char char是定长字符型,内部代码是:96,最多可 ... -
关于oracle rowid的一些内容 -- 转载
2010-12-13 15:47 783本文讨论的是关于oracle ...
相关推荐
Oracle Table Form Trigger是Oracle数据库应用开发中的重要概念,主要涉及三方面:Oracle表格(Table)、表单(Form)以及触发器(Trigger)。本篇将详细阐述这三个关键元素及其相互关系。 1. Oracle表格(Table)...
这是本人为公司ERP开发人员做的trigger报告,内容全面,并比较深入,有图例说明解释,以及一些流程图例等,是学习trigger的一个很好笔记。
在Oracle数据库中,触发器(Trigger)是一种存储过程,它会在特定的数据库操作(如INSERT、UPDATE或DELETE)发生时自动执行。标题“oracle trigger at a certain time”指的是创建一个定时触发器,即在特定时间点...
### 韩顺平玩转Oracle学习小结 #### 1. Oracle基础介绍 ##### 1.1 基本概念 **实例**: 在Oracle中,“实例”指的是数据库中的相关进程被启动并加载到内存中形成的一个整体。这些进程协同工作以支持数据库的正常...
在Oracle中,查看、编辑、重命名和删除触发器同样使用类似的操作,如`SELECT * FROM USER_TRIGGERS`来查看触发器,`ALTER TRIGGER`用于编辑,`RENAME TRIGGER`用于重命名,`DROP TRIGGER`用于删除。 通过学习和掌握...
**数据对象**:在Oracle数据库中,数据对象指的是用户创建的各种数据结构实体,包括但不限于表(Table)、视图(View)、存储过程(Stored Procedure)、触发器(Trigger)等。 - **表**:是最基本的数据组织形式,...
这个笔记是学习oracle数据库过程中整理出来的,比较详细,适合于初学者。 │ oracle与tomcat端口冲突.txt │ Oracle学习笔记.pdf │ Oracle学习笔记.wps │ 安装Oracle后myEclipse不能正常使用.txt │ 手工配置...
下面将对Oracle数据库的学习进行总结,并重点阐述触发器的概念与应用。 1. Oracle数据库入门:首先,Oracle数据库的安装和配置是基础环节。接着,学习使用SQL语言进行数据操作,这是Oracle数据库管理与开发的核心...
本资料包“Oracle基础学习 Trigger Precede ...”显然专注于Oracle数据库的基础知识,特别是与触发器(Trigger)和过程(Procedure)相关的部分。下面将深入探讨这两个核心概念。 一、Oracle数据库基础 Oracle...
在Oracle学习的第八章中,我们将聚焦于两个核心概念:触发器(Triggers)和内置程序包(Built-in Packages)。这两个概念是Oracle数据库开发中的重要组成部分,它们扩展了SQL的功能,为数据库应用提供了更高级别的...
本资源包“oracle-study-resource”针对Oracle SQL的基础学习提供了宝贵材料,适合初学者及希望巩固基础的用户。 在Oracle SQL的学习中,以下几个核心知识点至关重要: 1. 数据库概念:理解数据库的基本构成,如表...
### ORACLE数据库学习总结 #### 一、数据库简介与安装 **1、Oracle与SQL Server比较的优点:** - **跨平台支持:** Oracle支持多种操作系统平台,如Windows、Linux、Unix等,而SQL Server主要支持Windows系统。这...
这篇文档《Oracle数据库学习日记实用性最强的Oracle学习总结》旨在为初学者提供一个全面而实用的学习指南,涵盖从基础使用到高级管理的多个方面。 **1. 基本使用** 1.1 常用命令 Oracle数据库的日常操作涉及多种...
Oracle数据库是世界上最广泛使用的数据库...通过学习和掌握以上知识点,你可以更好地利用PL/SQL和Oracle数据库来解决实际问题,提高开发效率和数据库管理能力。记得在实践中不断探索和磨练,以深化对这些技术的理解。
【Oracle学习集锦】是一个包含了丰富Oracle数据库学习资源的压缩包,适合各个技术水平的ORACLE技术人员参考使用。这个集合中的文档涵盖了从基础概念到高级特性的广泛内容,旨在帮助用户深入理解和掌握Oracle数据库...
这份"Oracle SQL学习资料大全.zip"压缩包包含了丰富的学习资源,帮助初学者和进阶者深入理解并掌握Oracle SQL的核心概念和技术。以下将对Oracle SQL的一些关键知识点进行详细讲解。 1. **SQL基础**: - **SQL语言...
### Oracle学习总结 #### 一、创建表及表结构管理 **1. 创建表** 创建表是数据库设计的基础。在Oracle中,通过`CREATE TABLE`命令可以定义一个新的表及其属性。 例如,在创建一个名为`tb_operator`的用户信息表...
学习Oracle时,你需要了解各种数据库对象,包括表(TABLE)、索引(INDEX)、序列(SEQUENCE)、触发器(TRIGGER)、约束(CONSTRAINT)等。这些对象在数据库设计和管理中起着关键作用。 3. PL/SQL编程: PL/SQL...
在Oracle的学习资料中,“oracle学习.pdf”这一文档主要聚焦于Oracle数据库触发器的相关知识。触发器是一种特殊的存储过程,它会在特定的事件(如数据插入、更新或删除)发生时自动执行。这种机制有助于实现数据库的...
Oracle数据库是世界上最广泛使用的数据库系统之一,其强大的功能和灵活性吸引了众多企业和开发人员。...通过实践和学习,开发者能够熟练掌握这些概念,进而提升Oracle数据库应用程序的性能和稳定性。