这些过程中既涉及了update的用法,又涉及了多种触发器的创建,因而记录一下,还有在写sql语句的过程中发现nvl方法的一个用法很有用,习惯的使用方式是:nvl(col1,'0'/*或者是别的指定的值*/),另一个值得使用的方式:nvl(col1,col2),如果要取的col1的值为null,则取第col2的值,这两个列可以是一个表中的,也可以是不同表中的,nvl在计算的时候非常有用;其它的还有decode、case、to_number、to_date、trunc、sum、max(min)、avg、sysdate(dual)、rownum等等
--1、用户表更新时同步到my_person
create or replace trigger MY_TRI_USER
after insert or update or delete on t_user
for each row
declare
row_count number;
begin
if inserting or updating then
select count(*) into row_count from my_person where id=:new.user_id;
if(row_count>0) then --修改
update amy_person
a set (name,login_name,password,idcard,birth_date,sex,mail)=
(select u.name,u.user_name,u.password,e.certi_code,e.birthday,decode(e.gender,'M','1','F','2','未说明'),e.email from t_user u,t_employee e where u.user_id=e.emp_id and
u.user_id = a.id)
where exists (select 1 from t_user u,t_employee e where
u.user_id = a.id and u.user_id=e.emp_id);
else --新增
insert into my_person(id,name,login_name,password,idcard,birth_date,sex,mail,tel)
select u.user_id,u.user_name,u.password,e.certi_code,e.birthday,decode(e.gender,'M','1','F','2','未说明'),e.email,e.telph
from t_user u,t_employee e where u.user_id=e.emp_id and rownum=1;
end if;
end if;
if deleting then
delete from my_person where id=:old.user_id;
end if;
end;
--2、用户更新电话时同步到my_person
create or replace trigger MY_TRI_USER_FILTER
after
update of tel on MY_USER_FILTER
for each row
begin
update my_person set tel=:new.tel where id = :new.id;
end;
3、创建基于视图的instead of触发器【以下示例是摘抄的】
create or replace trigger tri_emp_view
instead of update
on my_emp_view
for each row
declare
begin
update emp set ename = :new.ename
where empno = :new.empno;
update dept set dname = :new.dname
where deptno = :new.deptno;
end;
触发器死锁
在itpub上看到的一段语句,特记录下来:怎么确定是出现了死锁或者锁等待的?
select '阻塞者(' || sb.sid || ':' || sb.serial# || '-' || sb.username || ')-' ||
qb.sql_text blockers,
'等待者(' || sw.sid || ':' || sw.serial# || '-' || sw.username || ')-' ||
qw.sql_text waiters
from v$lock lb, v$lock lw, v$session sb, v$session sw, v$sql qb, v$sql qw
where lb.sid = sb.sid
and lw.sid = sw.sid
and sb.prev_sql_addr = qb.address
and sw.sql_address = qw.address
and lb.id1 = lw.id1
and sb.lockwait is null
and sw.lockwait is not null
and lb.block = 1;
分享到:
相关推荐
在后台创建触发器的过程中,触发器命名总是无效 解决方法:1. 在命名前面加上dbo.------alter trigger dbo.[test] 解决方法:2. 把ALTER改为CREATE之后即可创建。
14、为学生表创建触发器,要求: (1)当用户成功删除该表中的一条或多条记录时,触发器自动删
给某数据库的所有表创建触发器,如所有表都有CreatedAt字段(创建时间),通过代码一次性搞定,非常高效。
JDBC创建触发器 JDBC存储过程 JDBC创建表 数据备份 java备份数据库/JAVA恢复数据、java导入sql脚本
本图书馆管理系统谨根据实际需要,创建了七个触发器,就此,创作者对这些触发器做如下说明: 1、tri_Book 功能表现:只有在图书馆内相关书籍尚有库存的情况下,读者才可以进行借阅操作 2、tri_SborrowNum 功能...
创建学生管理系统的触发器,可用于课程设计,创建sql数据库学生管理系统,任务
本文主要是介绍创建触发器的必要性,然后介绍触发器的应用场合,以及创建触发器能给我呢带来的好处,最后以实际的代码来阐述创建触发器的具体过程及步骤。
很详细的oracle创建触发器的例子
SQL server创建触发器实现级联删除
SQL创建触发器:如何将两张表的数据同步更新
前后触发器创建语句使用sql语句创建触发器
数据库原理的实验。创建触发器和存储过程的实验报告。详细介绍了创建触发器和存储过程的操作步骤
创建触发器删除、更新、插入
介绍数据库触发器的PPT。内容包括:存储过程的创建与使用;存储过程的查看、编辑和删除;触发器的创建与使用;触发器的查看、编辑、重命名和删除
这是一个数据库的建库,建表,添加数据,创建触发器,创建存储过程的一个例子,初学者可以根据这个例子学习数据库
数据库管理与应用 9.2.2使用Navicat创建触发器.pdf 学习资料 复习资料 教学资源
SQL中如何创建触发器.pdf
以sql server 2005为例介绍如何通过管理器和T-SQL创建触发器。