成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Oracle觸發器

數據庫 Oracle
觸發器是個特殊的存儲過程,它的執行不是由程序調用,也不是手工啟動,而是由事件來觸發,下文中就為大家詳細講解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

 

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觸發器的問題就為大家講解到這里,還有很多Oracle觸發器的知識這里沒有涉及到,以后我還會繼續為大家講解更多的關于Oracle觸發器的知識點,希望對大家能夠有所幫助。

 

責任編輯:迎迎 來源: 中國IT實驗室
相關推薦

2009-11-18 13:15:06

Oracle觸發器

2011-05-19 14:29:49

Oracle觸發器語法

2011-04-14 13:54:22

Oracle觸發器

2010-04-15 15:32:59

Oracle操作日志

2010-04-23 12:50:46

Oracle觸發器

2010-04-09 09:07:43

Oracle游標觸發器

2010-10-25 14:09:01

Oracle觸發器

2010-04-26 14:12:23

Oracle使用游標觸

2010-05-04 09:44:12

Oracle Trig

2011-04-19 10:48:05

Oracle觸發器

2011-03-03 14:04:48

Oracle數據庫觸發器

2010-04-26 14:03:02

Oracle使用

2010-04-09 13:17:32

2010-04-29 10:48:10

Oracle序列

2009-09-18 14:31:33

CLR觸發器

2011-03-28 10:05:57

sql觸發器代碼

2017-06-29 14:35:59

Oracle觸發器

2011-08-04 11:00:35

Oracle數據庫虛擬列復合觸發器

2021-07-30 10:33:57

MySQL觸發器數據

2010-05-18 15:58:39

MySQL觸發器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美成人免费在线 | a级在线免费观看 | 精品一二三区在线观看 | 毛片入口 | 中文字幕国产一区 | 亚洲国产成人久久综合一区,久久久国产99 | 一区二区中文 | 天天干天天玩天天操 | 午夜免费福利电影 | 免费一区二区三区 | 成人国产精品久久 | aaa在线 | 9999久久 | 精品99在线| av一区在线| 亚洲精品在线观看视频 | 久久爱综合 | 99久久久99久久国产片鸭王 | 日韩精品一区二区三区老鸭窝 | 精品欧美一区二区精品久久 | 欧美精品一区三区 | 最新中文字幕在线 | 欧美精品福利 | 精品久久久久国产 | 成人亚洲网站 | 精品国产一区二区三区久久久蜜月 | 99小视频 | 一级毛片视频在线 | 欧美日韩中文字幕在线 | 综合色久 | 国产精品一区二区在线 | 国产精品成人国产乱一区 | 一区二区三区四区国产精品 | 国产黄色在线观看 | 小h片免费观看久久久久 | 高清一区二区视频 | 日韩亚洲欧美综合 | 国产成人99av超碰超爽 | 国产视频二区 | 午夜亚洲 | 国产特级毛片aaaaaa喷潮 |