- 浏览: 455863 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
飞天奔月:
我来个简单点的代码 使用 LinkedHashSetpubli ...
ArrayList去重 -
飞天奔月:
public static <T> List< ...
ArrayList去重 -
aaron7524:
事务隔离级别 -
月陨殇:
wlh269 写道rswh110 写道lz内容写的不错,就是略 ...
事务隔离级别 -
lnx1824:
我的更奇怪,在本地静态的可以,放jetty里的页面后就不然,都 ...
JS得到上传图片尺寸
----实例--------------
--要求:当用户向pub_users表添加和删除数据时,将pub_users中的name字段和系统时间(yyyymmdd hh24:mi:ss)
--插入到表pub_logs的name和create_time字段
--创建表
create table pub_users(
user_Id number(4) primary key,
name varchar2(8),
pwd varchar2(20)
);
--添加数据
insert into pub_users values (1,'sss','sss');
insert into pub_users values (2,'ttt','ttt');
commit;
create table pub_logs(
username varchar2(8),
create_time varchar2(30)
);
--创建触发器
create or replace trigger crud_user_trigger
after insert or update or delete on pub_users --触发语句
for each row
begin
insert into pub_logs values(:old.name,to_char(sysdate,'yyyymmdd hh24:mi:ss'));
end;
--测试
update pub_users set pwd=123456 where user_id=1;
commit;
--------实例1-----------------
--创建触发器,当用户对test表执行DML语句时,将相关信息记录到日志表test_log
--创建测试表
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------------------------
--创建触发器,它将每个部门的总人数和总工资同步更新到一个表dept_sal中(注:每当用户对emp表,进行增删改操作,都重新做统计)
--创建映射表
CREATE TABLE dept_sal
AS
SELECT deptno,COUNT(empno) AS total_emp,SUM(sal) AS total_sal FROM emp GROUP BY deptno;
--创建触发器
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
--插入数据
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(1111,10,10000);
--DELETE emp WHERE empno=1111;
commit;
--实例3-------
--创建触发器,它记录表的删除数据
--创建表
CREATE TABLE employee(
id VARCHAR2(4) NOT NULL,
name VARCHAR2(15) NOT NULL,
age NUMBER(2) NOT NULL,
sex CHAR NOT NULL
);
--插入数据
INSERT INTO employee VALUES('e101','zhao',23,'M');
INSERT INTO employee VALUES('e102','jian',21,'F');
commit;
--创建记录表
CREATE TABLE old_employeeeeee AS SELECT * FROM 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------------------------
--创建触发器,利用视图插入数据(注:在试图中插入一条语句,那么相关的2个表中都被插入了数据)
--创建表
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');
commit;
--查看效果
SELECT * FROM tab_view;
--创建触发器,比较emp表中更新的工资
CREATE OR REPLACE TRIGGER sal_empBEFORE
before UPDATE ON emp
FOR EACH ROW
BEGIN
IFld.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 = 5000 WHERE empno = '7788';
commit;
--创建触发器,将操作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;
--要求:当用户向pub_users表添加和删除数据时,将pub_users中的name字段和系统时间(yyyymmdd hh24:mi:ss)
--插入到表pub_logs的name和create_time字段
--创建表
create table pub_users(
user_Id number(4) primary key,
name varchar2(8),
pwd varchar2(20)
);
--添加数据
insert into pub_users values (1,'sss','sss');
insert into pub_users values (2,'ttt','ttt');
commit;
create table pub_logs(
username varchar2(8),
create_time varchar2(30)
);
--创建触发器
create or replace trigger crud_user_trigger
after insert or update or delete on pub_users --触发语句
for each row
begin
insert into pub_logs values(:old.name,to_char(sysdate,'yyyymmdd hh24:mi:ss'));
end;
--测试
update pub_users set pwd=123456 where user_id=1;
commit;
--------实例1-----------------
--创建触发器,当用户对test表执行DML语句时,将相关信息记录到日志表test_log
--创建测试表
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------------------------
--创建触发器,它将每个部门的总人数和总工资同步更新到一个表dept_sal中(注:每当用户对emp表,进行增删改操作,都重新做统计)
--创建映射表
CREATE TABLE dept_sal
AS
SELECT deptno,COUNT(empno) AS total_emp,SUM(sal) AS total_sal FROM emp GROUP BY deptno;
--创建触发器
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
--插入数据
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(1111,10,10000);
--DELETE emp WHERE empno=1111;
commit;
--实例3-------
--创建触发器,它记录表的删除数据
--创建表
CREATE TABLE employee(
id VARCHAR2(4) NOT NULL,
name VARCHAR2(15) NOT NULL,
age NUMBER(2) NOT NULL,
sex CHAR NOT NULL
);
--插入数据
INSERT INTO employee VALUES('e101','zhao',23,'M');
INSERT INTO employee VALUES('e102','jian',21,'F');
commit;
--创建记录表
CREATE TABLE old_employeeeeee AS SELECT * FROM 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------------------------
--创建触发器,利用视图插入数据(注:在试图中插入一条语句,那么相关的2个表中都被插入了数据)
--创建表
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');
commit;
--查看效果
SELECT * FROM tab_view;
--创建触发器,比较emp表中更新的工资
CREATE OR REPLACE TRIGGER sal_empBEFORE
before UPDATE ON emp
FOR EACH ROW
BEGIN
IFld.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 = 5000 WHERE empno = '7788';
commit;
--创建触发器,将操作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;
- Trigger.rar (4.6 KB)
- 下载次数: 5
发表评论
-
java开发实战视频详解
2017-07-02 08:09 510java开发实战视频详解 链接: http://pan.bai ... -
mysql在window下备份
2013-02-03 09:25 1042命令:mysqldump –uroot –ppassword ... -
NoSQL非关系型数据库
2011-08-23 10:25 1500NoSQL(NoSQL = Not Only SQL ), ... -
Oracle 编码再回顾
2011-02-15 10:53 1157一、什么是Oracle字符集 ... -
位图索引与 B-tree 索引:选择与时间
2010-08-26 10:58 1575位图索引与 B-tree 索引:选择与时间 了解每个索引的正 ... -
Oracle的redo 和undo的区别
2010-07-28 15:33 1038redo--> undo-->datafile i ... -
Oracle归档模式与非归档模式设置
2010-07-16 16:14 1729Oracle的日志归档模式可以有效的防止instance和d ... -
比较牛逼的插入SQL语句
2010-06-02 10:22 1896MessageDaoImpl.java$saveMessa ... -
oracle的分析函数over 及开窗函数
2010-03-07 20:53 1079一:分析函数over Oracle从8.1.6开始提 ... -
Oracle Case 条件函数
2010-03-02 10:53 1301select dx.docid, case ... -
关于两表关联的update
2010-02-23 13:38 1701-- update 一个字段 update a ... -
oracle客户端编码修改
2010-02-04 12:15 1901从注册表修改:HKEY_LOCAL_MACHINE\SOFTW ... -
Oracle两个数据库间的数据同步 (DBLink 、计划任务)
2010-01-31 19:42 7263--配置本地数据库服务器的tnsnames.ora文 ... -
Oracle乱码最佳解决方案(JDK动态代理)
2010-01-18 17:29 4345该文章所解决的问题是Oracle下,乱码问题 描述: 1.库服 ... -
Oracle数据库字符集问题解析
2009-12-14 16:15 1034经常看到一些朋友问OR ... -
Oracle函数大全
2009-12-14 16:13 941SQL中的单记录函数 1.ASCII 返回与指定的字 ... -
导入导出
2009-11-10 09:50 928导入命令: 1.cmd进入命令行; (1)无连接登录o ... -
两种外连接
2009-10-26 13:54 950select cpxx.cp_xh, ... -
Oracle Blob (二进制文件的读写)
2009-10-18 23:16 6158import java.io.FileNotFoundEx ... -
Oracle时间操作
2009-08-21 16:04 967一.插入当前日期 //构造系统时间的字符串 Str ...
相关推荐
### D触发器二分频电路图详解 #### 一、D触发器简介 D触发器是一种基本的数字逻辑元件,广泛应用于数字电子系统中。它主要用于数据存储或数据选择等功能。D触发器的特点是它只有一个数据输入端D,以及一个时钟输入...
- 学习了如何通过触发器之间的组合构建分频电路,如二分频和四分频电路。 通过这样的实验,学生不仅能够理论联系实践,还能够深化对数字逻辑电路的理解,特别是触发器在时序逻辑中的重要作用。这种实践经验对于...
二分频触发器:时钟每触发2个周期时,电路输出1个周期信号。 比如用一个脉冲时钟触发一个计数器,计数器每计2个数就清零一次并输出1个脉冲,那么这个电路就实现了二分频功能。 四分频触发器: 两个D触发器级联实现四...
#### 二、存储过程的创建与应用 ##### 2.1 创建存储过程 创建存储过程需要使用 `CREATE PROCEDURE` 语句。这个过程通常涉及定义存储过程的名称、参数(如果有)、执行的 SQL 语句等。例如: ```sql CREATE ...
JK触发器是数字电路设计中的基本元件之一,用于存储和传递二进制数据。它具有J和K两个输入端,以及一个时钟信号输入和一个二进制输出。在VHDL(Very High Speed Integrated Circuit Hardware Description Language)...
第二部分涉及触发器之间的相互转换。在数字逻辑中,常见的触发器类型有RS、D、T、JK等。通过适当的逻辑门连接,这些触发器可以互相转换,实现不同类型的时序逻辑功能。例如,D触发器可以通过非门和与门转换为T触发器...
本文将深入探讨如何利用Quartus软件进行D触发器的设计,并利用这些触发器构建二分频和四分频电路。 首先,我们来理解D触发器的基本概念。D触发器是一种无稳态存储单元,其输入端D(Data)的当前状态会在时钟上升沿...
实验报告的主题围绕着数字逻辑中的基本触发器,包括RS触发器、D触发器、JK触发器的功能理解和应用。实验旨在让学习者通过实际操作和仿真理解这些触发器的工作原理及特性。 1. **基本RS触发器**:由与非门构建的RS...
触发器作为基础的存储元件,其核心特性在于它们能维持两种稳定状态,代表二进制的0和1,并在特定条件下能够从一种状态翻转至另一种状态。 1. **基本RS触发器**: RS触发器由两个与非门交叉耦合构成,提供置"0"(S=...
**实验二十五:触发器** 在IT领域,尤其是数据库管理中,触发器(Triggers)是一种重要的编程机制。它们是数据库管理系统(DBMS)中的预定义程序,能够在特定的数据库操作(如INSERT、UPDATE或DELETE)发生时自动...
触发器是一种双稳态的存储设备,能够存储一位二进制数(0或1),并且在输入信号变化时改变其输出状态。RS触发器和SR触发器在逻辑功能上非常相似,但它们之间存在重要的区别,尤其是在处理同时激活的置位(Set)和...
74ls74d触发器构成4位二进制异步加法计数器.ewb
RS触发器Proteus仿真
触发器是数字电子系统中的基础元件,主要负责存储和传输二进制信息。它们在时序逻辑电路中起到关键作用,能够保持数据直到被新的信号覆盖或改变。RS、D、JK触发器是三种常见的类型,各有其特定的逻辑功能和应用场景...
JK触发器是数字电路设计中的基本元件之一,用于存储和传递二进制数据。它是一种双稳态电路,能够根据输入的J(设置)和K(复位)信号改变其输出状态。在VHDL(Very High Speed Integrated Circuit Hardware ...
在逻辑表示中,通常以Q端的逻辑状态代表触发器的状态,因此触发器存储的二进制信息就是Q端的电平。 为了使得RS触发器具有记忆功能,在需要触发翻转时,会利用负脉冲信号。在触发器状态改变后,即使负脉冲消失,...
第二步,当 CP 由 0 变 1 时触发器翻转。这时 G3 和 G4 打开,它们的输入 Q3 和 Q4 的状态由 G5 和 G6 的输出状态决定。第三步,在 CP=1 时输入信号被封锁。 边沿 D 触发器的特征方程为 Qn+1=D,状态转移图脉冲特性...
用T'触发器构成的异步二进制加法计数器实验电路multisim源文件,multisim10及以上版本可以正常打开仿真,是教材上的电路,可以直接仿真,方便大家学习。
触发器──能够存贮1位二值信号的基本单元电路。 FF的基本特点: ①有两个能自行保持的稳态(1、0); ②可根据不同的输入信号进行置0或置1; ③状态的保持与输入信号无关; 基本FF──也叫基本RS—FF,是...