- 浏览: 120675 次
文章分类
最新评论
-
asheng0401:
楼主,你这相当于给那些会用的人看的
一个Java项目Ant实例 -
rmn190:
太好了, 刚从Linux转到Windows, 正需要一个关于c ...
收集到的cygwin使用资料 -
eren:
( ^_^ )不错嘛,收藏喽
Oracle Sqlplus 命令使用 -
楚若之夜:
好东西,顶起
[转贴]Oracle trigger实践 -
tigerli:
赞!
收集到的cygwin使用资料
一篇关于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//
发表评论
-
Tips of sqlplus
2007-11-14 10:13 12081, 如何用SQL导出存储过程 sql 代码 ... -
[转载]oracle日期操作方法
2007-08-27 11:03 4868在oracle中有很多关于日期的函数,如: 1、add_m ... -
[应用]试用oracle的function
2007-08-23 12:58 2104近日写了一些vew,用到了自定义funciton,都是多表连接 ... -
转贴:oracle 存储过程的一些基本语法
2007-08-01 15:06 10851.基本结构 CREATE OR REPLACE PROCE ... -
应用:通过存储过程返回集合
2007-08-01 09:44 14261,首先是oracle的存储过程,利用了cursor sql ... -
应用:将操作结果导入到文件中
2007-07-19 10:59 1151利用sqlplus的命令spool完成: sql 代码 ... -
应用:用dblink连接两个实例
2007-07-19 10:56 1338sql 代码 --============== ... -
Oracle Sqlplus 命令使用
2007-07-19 10:30 5958一、ORACLE的启动和关闭 1、在单机环境下 要想启动或关闭 ... -
Oracle函数列表速查
2007-07-19 10:19 1022PL/SQL单行函数和组函数详解 函数是一种有零个或多个参数并 ... -
Oracle数据库碎片整理
2007-06-08 13:54 1521Oracle 作为一种大型数据库,广泛应用于金融、邮电、电力、 ... -
oracle服务启动停止方法
2007-06-08 13:51 7482好久不用oracle,差不多 ... -
ORACLE常用Script
2007-06-08 13:48 12671、查看当前所有对象 SQL> select * f ... -
ORACLE之常用FAQ V1.0[转载]
2007-06-08 13:29 1233第一部分、SQL&PL/SQL [Q]怎么样查询特殊 ... -
应用:一个oracle存储过程--利用了cursor
2007-05-15 15:58 1273通过其它两个表的关系,来 更新某一个表的一个字段值, sq ...
相关推荐
易语言是一种基于中文编程的计算机...总的来说,易语言源码动网转贴不仅涵盖了网络编程、数据处理、用户交互等基础知识,还涉及到安全、性能优化等多个领域,对于学习和理解易语言及网络应用开发有着重要的实践价值。
这个名为“动网转贴”的项目,是易语言编程实践中一个典型的例子,它为学习者提供了宝贵的实践素材,无论你是个人学习、学生毕业设计还是小团队的项目开发,都能从中获取灵感和参考。 首先,我们要理解易语言的核心...
易语言是中国本土开发的一种编程语言,它以汉字作为程序代码的基本元素,降低了...对于初学者,可以通过学习这个项目了解易语言的编程实践;对于有经验的开发者,它可以作为一个研究网络数据迁移和论坛系统集成的案例。
由于现在流行的转贴工具都是基于浏览器的,转换速度比较慢,还得打开浏览器才能使用(同时受到浏览器版本限制)。 <br> 而这个小程序则完全不依赖于浏览器,以BFC采集器的UBB转换模块为基础,转换速度超快,...
【标题】"动网转贴.e.rar"是一个压缩文件,很可能包含了有关动网论坛或社区的相关资源、数据或用户帖子的备份。动网是中国早期知名的网络论坛软件之一,提供了丰富的社区功能,允许用户发帖、回帖、互动等。这个...
《动易系统的论坛转贴工具详解与应用》 在互联网信息交流日益频繁的今天,论坛作为用户互动的重要平台,其内容分享与传播的作用不容忽视。动易系统的论坛转贴工具,便是为了解决用户在论坛间便捷分享内容而设计的一...
收集了各位大神的冷备份步骤, 转贴,经过测试,按照这个描述的步骤执行,成功备份,中间没有任何问题
在“导电泡棉转贴装置”这个特定的场景下,我们可能是在讨论一种用于电子政务设备或系统中的特殊组件。 导电泡棉是一种具有导电性能的泡沫材料,通常用于电子设备的屏蔽、接地或防静电保护。在电子政务设备中,这种...
去除Html中的干扰码等(样例中以轻之国度的干扰码为例) 配置文件语法: 方法类型(整数) 最大匹配长度(整数) 字符串1(删除开头) 字符串2(删除结尾) 方法类型: 1:删除单行 2:删除行与行之间的
东度极品论坛转贴工具东度极品论坛转贴工具
这份文档可能包含了从贴花纸的设计、生产到实际转贴过程中的各种技术细节和实践经验。 1. 贴花纸设计:设计是贴花纸生产的第一步,通常涉及到图案创意、色彩搭配以及尺寸规划。设计人员需要考虑木器或玻璃制品的...
【标题】"论坛转贴 v1.0 JS版-源码.zip" 提供的是一个基于JavaScript的论坛转贴功能的源代码实现。JS版通常指的是使用JavaScript编程语言编写的版本,这表明该软件可能主要用于网页端,利用浏览器的JavaScript引擎...
在本主题中,我们将深入探讨如何利用jQuery实现“转贴”功能,这是一种常见的社交媒体分享功能,允许用户将网页内容轻松分享到各种社交网络。 首先,让我们了解一下jQuery的核心概念。jQuery通过一种简洁的语法提供...
本压缩包文件"行业分类-设备装置-FPC吸附胶纸转贴组件.zip"主要关注的是FPC在实际应用中的一个重要环节——FPC吸附胶纸转贴组件。这个组件在FPC的制造和组装过程中起到关键作用,确保FPC能够稳定地固定在设备上,并...
**标题:“胖子说RUP(转贴)”,源自博客文章:https://lkfnn.iteye.com/blog/33902** 这篇文章是关于Rational Unified Process(RUP)的讨论,由“胖子”(可能是作者的昵称)分享的一个转帖。RUP是一种广泛使用的...
对于想要深入学习ASP或论坛开发的读者来说,这个源码提供了一个实践和学习的机会。通过分析源码,不仅可以理解论坛转贴工具的工作原理,还可以提升自己在ASP编程、数据库管理和Web安全等方面的能力。
转贴一个网络设计的例子
本篇将详细探讨“电子功用-导电胶配对模切对半转贴加工方法”,这是一种高效的生产工艺,旨在提高电子产品的性能和可靠性。 导电胶主要由导电填料(如金属颗粒)、树脂基体和添加剂组成。它的特性在于既能保持良好...
"易语言动网转贴"是指使用易语言编写的一段代码或程序,主要用于在动网上实现帖子的转换或者迁移。动网可能是一个论坛或社区平台,转贴功能则是将某个地方的帖子复制到另一个地方,保持其内容完整。 在这个源码中,...