Oracle触发器_≮金今哲≯_百度空间
--创建触发器(行级触发器)  
create or replace trigger tri_update_emp_bak  
after update  
on emp_bak  
for each row --每更新一行 就触发一次   
begin
     --oracle 里面 对触发器 也提供了特殊的对象 :NEW
--创建触发器(行级触发器)  
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.put_line(tempcard);  
-- dbms_output.put_line(cardno);  
end;  

--使用UTL_FILE包读写文件  
create directory MY_DIR as 'd:\temp';  
create directory MY_DIR2 as 'd:\temp2';  

declare  
--定义文件对象   
   myfile utl_file.file_type;  
--定义变量 用来存储每读出一行的数据  
   linestr varchar2(200);  
begin
   --打开文件      
     myfile:= utl_file.fopen('MY_DIR','oracle.log','r');  
     
   --进行读取(循环)  
   loop  
           utl_file.get_line(myfile,linestr);  
           dbms_output.put_line(linestr);  
   end loop;  
        
     exception  
       when others then   
           utl_file.fclose(myfile);  
          dbms_output.put_line('读取完毕!');  
             
end;  

declare  
--定义文件对象   
   myfile utl_file.file_type;  
--定义变量 用来存储每读出一行的数据  
   linestr varchar2(200);  
begin
   --打开文件      
     myfile:= utl_file.fopen('MY_DIR','oracle.log','a');  
     
   --追加数据  
    
           --utl_file.get_line(myfile,linestr);  
           utl_file.put_line(myfile,'你好,这是新的数据',true);  
        
            utl_file.fclose(myfile);  
      exception  
       when others then   
           utl_file.fclose(myfile);  
          dbms_output.put_line('读取完毕!');  
             
end;  

--拷贝  

declare  
--定义文件对象   
   sourcefile utl_file.file_type;  
   targetfile utl_file.file_type;  
--定义变量 用来存储每读出一行的数据  
   linestr varchar2(200);  
begin
   --打开文件      
     sourcefile:= utl_file.fopen('MY_DIR','oracle.log','r');  
     targetfile:= utl_file.fopen('MY_DIR2','copy.txt','a');  
       
   --进行读取(循环) 并且写入到新的文件里面  
   loop  
            utl_file.get_line(sourcefile,linestr);  
            utl_file.put_line(targetfile,linestr,true);  
          -- dbms_output.put_line(linestr);  
   end loop;  
        
     exception  
       when others then   
           utl_file.fclose(sourcefile);  
            utl_file.fclose(targetfile);  
          dbms_output.put_line('拷贝完毕!');  
             
end;



郑重声明:资讯 【Oracle触发器_≮金今哲≯_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——