您现在的位置: 首页  > Oracle > 基础知识
通行证登录
 

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.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; |