设为首页 加入收藏

TOP

Oracle触发器(一)
2014-11-24 02:24:37 来源: 作者: 【 】 浏览:2
Tags:Oracle 触发器
-创建触发器(行级触发器)
create or replace trigger tri_update_emp_bak
after update
on emp_bak
for each row --每更新一行 就触发一次
begin
-- Oracle 里面 对触发器 也提供了特殊的对象 :NEW :OLD 来访问 更新前后的数据


dbms_output.put_line(更新后 || :NEW.sal);
dbms_output.put_line(更新前 || :OLD.sal);

if updating then

end if;

if inserting

end;


--创建触发器(行级触发器)(前置)
create or replace trigger tri3_update_emp_bak
before update
on emp_bak
for each row --每更新一行 就触发一次
begin
--oracle 里面 对触发器 也提供了特殊的对象 :NEW :OLD 来访问 更新前后的数据


dbms_output.put_line(更新后 || :NEW.sal);
dbms_output.put_line(更新前 || :OLD.sal);

end;





select * from emp_bak



update emp_bak set sal = 1000 where empno in (7788)



--创建触发器(表级触发器)
--//表级别触发器里面 不允许使用 :NEW :OLD 变量
create or replace trigger tri2_update_emp_bak
after update
on emp_bak
begin


-- dbms_output.put_line(更新后 || :NEW.sal);
--dbms_output.put_line(更新前 || :OLD.sal);

end;




--创建触发器(行级触发器)
create or replace trigger tri4_update_emp_bak
after update of sal
on emp_bak
for each row --每更新一行 就触发一次
begin
--oracle 里面 对触发器 也提供了特殊的对象 :NEW :OLD 来访问 更新前后的数据


dbms_output.put_line(更新后 || :NEW.sal);
dbms_output.put_line(更新前 || :OLD.sal);

end;



create table userinfo
(
userid number(4) PRimary key,
username varchar2(20)
)

create table addrinfo
(
addrid number(4) primary key,
addname varchar2(20),
userid number(4) references userinfo(userid)
)

insert into userinfo values (1,李四)
insert into addrinfo values (1,湖北武汉,1)

select * from addrinfo



delete from userinfo where userid =1

--级联删除
create or replace trigger tri_userinfo_delete
before delete
on userinfo
for each row
begin
delete from addrinfo where userid = :OLD.userid;
-- insert into
end;





create table dept_bak as select * from dept



create or replace view myview
as
select a.empno,a.ename,a.sal,b.dname
from emp a inner join dept b
on a.deptno = b.deptno




select * from myview

update myview set sal = 1000,dname=aaaaa where empno = 7499


--替代触发器 用在视图上面 只能是行级的
--替代触发器 特点是 真正的操作已经 变成了一个动作而已 功能由触发器来完成
create or replace trigger tri_myview
instead of update
on myview
begin

dbms_output.put_line(删除操作执行了。。。);
update emp set sal = :NEW.sal where empno = :OLD.empno;

update dept set dname = :NEW.dname where dname = :OLD.dname;
--delete from emp where empno = :OLD.empno;

end;



select * from emp;
select * from dept;


update emp_bak set ename =aaaa,sal = 10000 where empno in (7788)


-- 系统
-- 产生随机数
**** **** **** ****
--dbms_random.value 0-1 之间的随机小数
--dbms_random.random 随机整数
select dbms_random.value from dual;



create or replace procedure proc_cardno(mycardno out varchar2)
as
tempcard varchar2(50);
cardno varchar2(19);
begin
tempcard:= dbms_random.value;

cardno:=substr(tempcard,2,4)|| ||substr(tempcard,6,4)|| ||substr(tempcard,10,4)|| ||substr(tempcard,14,4);

mycardno:=cardno;

-- dbms_output
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Oracle触发器的一个简单例子 下一篇oracle权限管理

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: