Oracle操縱數(shù)據(jù)_第1頁
Oracle操縱數(shù)據(jù)_第2頁
Oracle操縱數(shù)據(jù)_第3頁
Oracle操縱數(shù)據(jù)_第4頁
Oracle操縱數(shù)據(jù)_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、1,表管理(1)創(chuàng)建表語句:CREATE TABLE table_name(field1 datatype, /field:指定列名 datatype:指定列類型field2 datatype,)(2)oracle常用數(shù)據(jù)類型char(size):定長,字母占一字節(jié),漢字占兩字節(jié),最大2000個字符。如:create table test1(name char(32) /在name列,最多只能放32個字符,如果超過會報(bào)錯,如果不夠,則用空格補(bǔ)全。varchar2(size):變長,最大可存放4000個字符。nchar(size):定長,編碼方式是unicode,漢字和字母都占一個字符,最大字符

2、2000nvarchar2(size):變長,uinicode編碼,最大可存放4000個字符clob:字符型大對象,變長,最大8tbblob:變長,最大8tb,可存放聲音,圖片等對象說明:實(shí)際應(yīng)用中很少把文件存放到數(shù)據(jù)庫(效率問題),當(dāng)需要考慮文件安全時才放入。number(p,s): 可存放整數(shù)和小數(shù),變長,p表有效位,s表小數(shù)位.保存數(shù)據(jù)范圍:-1E-130=number value=1e126,1=p=38,-84500 or job=MANAGER) and (ename like J%); order by(排序) 使用:排列方式有降序(desc)和升序(acs),默認(rèn)是acs。如

3、select * from emp order by sal asc/desc; /沒寫排序方式,則默認(rèn)升序排列。注:order by后面跟數(shù)字時,表示按第幾個字段排序,所跟數(shù)不能超出列數(shù)。 使用列的別名排序:select ename,sal*12 年薪 from emp order by 年薪; 分頁查詢3.oracle表復(fù)雜查詢(1)數(shù)據(jù)分組 常用函數(shù)max,min,avg,sum,count。 max取最大值,min取最小值,avg取平均值,sum取和,count統(tǒng)計(jì)數(shù)量。count(*)返回的是所有數(shù)據(jù)條數(shù)量,count(字段)返回有值的數(shù)據(jù)條數(shù)量。 group by.having使用

4、:按條件將數(shù)據(jù)分組如:select avg(sal) deptno from emp group by deptno,job order by deptno; /得到每個部門每個工作的平均工資并排序。select avg(sal) deptno from emp group by deptno having avg(sal)all(select sal from emp where deptno=30);any的使用:select * from emp where salany(select sal from emp where deptno=30); 多列子查詢:子查詢中返回多列。如:sel

5、ect * from emp where (deptno,job)=(select deptno,job from emp where ename=SMITH); from子句中使用子查詢:將查詢結(jié)果當(dāng)做一個臨時表對待。如 select t1.* from emp t1,(select avg(sal) myavg,deptno from emp group by deptno) t2 where t1.deptno=t2.deptno and t1.salt2.myavg; /顯示高于自己部門平均工資的員工信息。(3) 分頁查詢 各數(shù)據(jù)庫分頁查詢語句:如演示取出數(shù)據(jù)5到12數(shù)據(jù)。mysql:

6、select * from users limit 5,8;sql server: select top 8 * from users where id not in (select top 4 id from users);oracle: select t2.* from (select t1.*,rownum rm from (select * from emp) t1 where rownum=5; /t1是第一層過濾語句得到數(shù)據(jù)的結(jié)果集,t2是第二層過濾得到前12條數(shù)據(jù),第三層過濾后得到5到12的8條數(shù)據(jù)。 測試分頁查詢效率快速建表(從emp表中復(fù)制數(shù)據(jù)):create table m

7、ytest as empno,ename from emp;自我復(fù)制(快捷形成海量數(shù)據(jù)表):insert into mytest (empno,ename) select empno,ename from mytest;(4) 合并查詢union:用于取得兩個結(jié)果集的并集,會自動去掉結(jié)果集中重復(fù)行,并自動排序。union all:與union相似,但不會取消重復(fù)行,且不會排序。intersect:取兩結(jié)果的交集。minus: 取兩結(jié)果的差集,即并集與交集的差。(5) 使用子查詢完成遷移的需求如 create table temp# as select empno,ename from emp

8、where ename like S%;(6) 使用子查詢完成更新如 update emp set (job,sal,comm)=(select job,sal,comm from emp where ename=SMITH) where ename=SCOTT; /把scott的工作,工資,補(bǔ)助改成更smith一樣4.oracle表的內(nèi)連接和外連接(1)內(nèi)連接:就是利用where子句對兩張表形成的笛卡爾集篩選,只顯示匹配的數(shù)據(jù)。如 select emp.ename,dept.dname from emp,dept where emp.deptno=dept.deptno;等價于 select

9、 emp.ename,dept.dname from emp inner join dept on emp.deptno=dept.deptno;(2)外連接左外連接:左側(cè)表完全顯示,右側(cè)表顯示匹配數(shù)據(jù)。如 select d.deptno,d.dname,e.ename from dept d left join emp e on d.deptno=e.deptno;/此時會把沒人的40部門也顯示出來。其他寫法:select d.deptno,d.dname,e.ename from dept d deft ,emp e where d.deptno=e.deptno(+); 右外連接:右側(cè)表

10、完全顯示,左側(cè)顯示匹配數(shù)據(jù)。如select d.deptno,d.dname,e.ename from emp e right join dept d on d.deptno=e.deptno; select d.deptno,d.dname,e.ename from emp e,dept d where d.deptno(+)=e.deptno;完全外連接:完全顯示兩個表,沒有匹配的記錄置為空。如 select d.deptno,d.dname,e.ename from dept d outer join emp e on d.deptno=e.deptno;5.維護(hù)數(shù)據(jù)的完整性定義:數(shù)據(jù)完

11、整性可以使用約束,觸發(fā)器,應(yīng)用程序(過程,函數(shù))三種方法來實(shí)現(xiàn),約束是維護(hù)數(shù)據(jù)完整性的首選(1) 約束:用于確保數(shù)據(jù)庫數(shù)據(jù)滿足特定的商業(yè)規(guī)則a) not null(非空)i. 用于指定某列值不能為空b) unique(唯一)i. 指定列值不能重復(fù),但是可以為nullc) primary key(主鍵)i. 用于唯一的標(biāo)示表行的數(shù)據(jù),指定列不但不能重復(fù),而且不能為nullii. 一張表可以有多個unique,但最多只能有一個主鍵d) foreign key(外鍵)i. 用于定義主表和從表之間的關(guān)系ii. 外鍵約束要定義在從表上,主表則必須具有主鍵約束或是unique約束iii. 要求外鍵列數(shù)據(jù)必

12、須在主表的主鍵列存在或是為nulle) check(約束)i. 用于強(qiáng)制數(shù)據(jù)必須滿足的條件(2) 用法舉例create table goods(goodsId number primary key, -設(shè)置主鍵goodsName varchar2(36) not null, -商品名字不能為空unitprice number check (unitprice0), -單價要大于0category varchar2(64) check (category in (食物,日用品),)create table customer(customerId number primary key,cusNam

13、e varchar2(32) not null,email varchar2(64) unique), -電郵不能重復(fù)sex char(2) default 男 check (sex in(男,女) , -性別只能選男或女,默認(rèn)是男)create table purchase(customerId number references customer(customerId), goodsId number references goods(goodsId),nums number check (nums0)(3) 表約束修改a) 修改語句:alter table 表名 modify 字段 約束

14、;b) 添加語句:alter table 表名 add constraint xxx 約束(字段)(4) 刪除約束a) 語句:alter table 表名 drop constraint xxx(字段);b) 當(dāng)兩張表存在主從關(guān)系時,那么刪除主表的主鍵約束時,必須帶上cascade,如 alter table 表名 drop primary key cascade;(5) 列級定義和表級定義a) 列級定義:列級定義是在定義列的同時定義約束b) 表級定義時指在定義了所有列后,再定義約束,需要注意的是:not null約束只能在列級定義c) 一般情況下使用列級定義即可,但當(dāng)含復(fù)合主鍵時要用表級定義

15、(6) 序列(sequence):用于處理自動增長列a) 可以為表中的列自動產(chǎn)生值,一般用于主鍵或唯一列b) 由用戶創(chuàng)建數(shù)據(jù)庫對象,并可由多個用戶共享c) 案例說明:創(chuàng)建一個序列i. create sequence myseq -創(chuàng)建序列名ii. start with 1 -從1開始iii. increment by 1 -每次增長1iv. maxvalue 9999/NOMAXVALUE -設(shè)置最大值9999/不設(shè)最大值v. minvalue 1 -最小值vi. cycle /NOCYCLE -循環(huán)/一直累加,不循環(huán)vii. nocache; -緩存viii. 創(chuàng)建后在表中使用:create

16、 table test1 (id number primary key,name varchar2(32);insert into test1 values(myseq.nextval,tang)可用myseq.currval返回當(dāng)前的序列值,必須在調(diào)用了次nextval后才可用用myseq.nextval增加序列值,然后返回6.索引(1) 單列索引:基于單個別所建立的索引語法:create index index_name on table(columnname);(2) 復(fù)合索引:基于兩列或是多列的索引。在同一張表上可以有多個索引,但要求列的組合必須不同。語法:create index i

17、ndex_name on table(col_name,col_name);注:在大表上建立索引才有意義在where子句或是連接條件上經(jīng)常引用的列上建立索引索引的層次不要超過4層 在邏輯類型字段上,或者值就固定幾種的列上也不索引(3)索引的缺點(diǎn):a) 建立索引,系統(tǒng)要占用大約為表的1.2倍的硬盤和內(nèi)存空間來保存索引b) 更新數(shù)據(jù)的時候,系統(tǒng)必須要又額外的時間來同時對索引更新,一維持?jǐn)?shù)據(jù)和索引的一致性。7.oracle 的pl/sql編程(1)概念pl/sql是在標(biāo)準(zhǔn)sql語句基礎(chǔ)上擴(kuò)展的一種對oracle數(shù)據(jù)庫進(jìn)行編程的語句??梢远x常量和變量,而且可以使用條件語句和循環(huán)語句。(2)pl/sq

18、l編程優(yōu)點(diǎn)a)提高應(yīng)用程序的運(yùn)行性能b)模塊化的設(shè)計(jì)思想分頁的過程,訂單的過程,轉(zhuǎn)賬的過程.c)減少網(wǎng)絡(luò)傳輸量d)提高安全性(3) 缺點(diǎn)是移植性不好(4)案例解析:創(chuàng)建一簡單的存儲過程,可以完成向某表添加一條記錄create procedure pro1(in_empno number,in_ename varchar(16) is begin insert into emp(empno,ename) values(in_empno,in_ename); end;/ 調(diào)用存儲過程exec pro1(3333,juan);(5) pl/sql作用pl/sql可以開發(fā) 過程、函數(shù)、包(包體)、觸發(fā)

19、器。他們的基礎(chǔ)編程單元是塊(7) 編寫規(guī)范a) 注釋:單行注釋-; 多行注釋/*.*/b) 標(biāo)識符號的命名規(guī)范i. 定義變量時,建議用v_作為前綴 如 v_salii. 定義常量時,建議用c_作為前綴 如 c_rateiii. 當(dāng)定義游標(biāo)時,建議用_cursor作為后綴 如 emp_cursoriv. 當(dāng)定義例外時,建議用e_作為前綴 如 e_error(8) pl/sql塊結(jié)構(gòu)a) pl/sql塊由三部分構(gòu)成:i. declare /定義部分-定義常量、變量、游標(biāo)、例外、復(fù)雜數(shù)據(jù)類型ii. begin /執(zhí)行部分-要執(zhí)行的pl/sql語句iii. exception /例外不理部分-處理運(yùn)行

20、的各種錯誤iv. end; /declare和exception部分是可選的,begin是必須的b) 案例解析i. declare1. v_ename varchar2(16); -格式:變量名 變量的類型ii. begin 1. select ename into v_ename form emp where empno=&empno;-把ename值放入變量,&表示要接收從控制臺輸入的變量2. dbms_output.put_line(雇員名是|v_ename); -輸出v_ename3. exception -異常處理語法: when 異常名稱 then4. when no_data_f

21、ound then dbms_output.put_line(未找到該編號的雇員); 5. end;/注:在默認(rèn)情況下,結(jié)果不輸出,需要設(shè)置set serveroutput onno_data_found異常要在含select .into的語句下才可捕獲塊執(zhí)行完就消失,所以應(yīng)融入過程中案例解析2:create procedure pro2 (in_empno number) isv_ename varchar2(8);beginselect ename into v_ename from emp where empno=in_empno;dbms_output.put_line(雇員名是|v_

22、ename); -|表示把兩個字符串拼接end;(9) 過程詳解a) oracle過程,可以指定參數(shù)是輸入的參數(shù),還有輸出的參數(shù)b) 基本語法:create procedure 過程名(變量名in 變量類型. 變量名 out 變量類型) is.c) 調(diào)用過程方法: exec 過程名(參數(shù)值) call 過程名(參數(shù)值)d) 案例解析:i. create or replace procedure pro3(in_ename in varchar2,in_new_sal in number) is -加or replace時,當(dāng)方案中已存在pro3時會字段替換ii. beginiii. updat

23、e emp set sal=in_new_sal where ename=in_ename;iv. end;/e) 當(dāng)出現(xiàn)錯誤時,可以輸入show error來顯示具體錯誤8.pl/sql基礎(chǔ)知識(1) 函數(shù):用于返回特定的數(shù)據(jù),在頭部必須包含return子句,在函數(shù)體內(nèi)必須包含return語句返回的數(shù)據(jù)。(2) 案例分析:a)創(chuàng)建-create function 函數(shù)名(參數(shù)1.) return 數(shù)據(jù)類型 iscreate function fun1(in_v_ename varchar2)return number is-定義變量;v_sal number;begin-執(zhí)行語句;selec

24、t (sal+nvl(comm,0)*13 into v_sal from emp where ename=in_v_ename;return v_sal;end;/b)調(diào)用 :select 函數(shù)名(實(shí)際參數(shù)) from dual;(2)包:用于邏輯上組合過程和函數(shù),便于管理,由包規(guī)范和包體兩部分組成a)包創(chuàng)建:create or replace packege 包名 isprocedure 過程名(變量名 變量類型.);function 函數(shù)名(變量名 變量類型.) return 數(shù)據(jù)類型;end;b)實(shí)例創(chuàng)建-在包中聲明過程和函數(shù)create or replace packege pk1

25、isprocedure pro(in_empno number, in_ename varchar2);function fun1(in_ename varchar2) return number;end;d) 包體:實(shí)現(xiàn)已聲明的包,實(shí)例化包中的過程和函數(shù)create or replace package body pk1 isprocedure pro(in_empno number,in_ename varchar2) is-過程實(shí)現(xiàn)function fun1(in_v_ename varchar2) return number isv_sal number;beginselect (sa

26、l+nvl(comm,0)*13 into v_sal from emp where ename=in_v_ename;return v_sal;end;end;e) 包的過程或函數(shù)調(diào)用調(diào)用包內(nèi)過程和函數(shù)時,在過程和函數(shù)前需要帶包名,如果要訪問其他方案的包,還需在包名前加方案名exec/call 方案名.包名.過程名(參數(shù)值.);(3) 定義并使用變量a)標(biāo)量類型(scalar)定義一個變長字符串:v_ename varchar2(10);定義一個小數(shù)范圍 -9999.999999.99并賦值: v_sal number(6,2):=5.4;定義一個日期類型數(shù)據(jù):v_hiredate date

27、;定義一個布爾變量,不能為空,初始為false:v_valid boolean:=false;%type的使用可以使定義的變量的類型和長度按照數(shù)據(jù)庫列來確定v_ename emp.ename%type; v_sal emp.sal%type;b)復(fù)合變量(composite):用于存放多個值得變量pl/sql記錄基本語法:type 自定義的記錄名稱 is record(變量 變量類型,變量 變量類型);記錄案例解析:create or replace procedure pro3(v_empno in number) istype hsp_emp_record is record(v_enam

28、e emp.ename%type,v_sal emp.sal%type,v_job emp.job%type);v_emp_record hsp_emp_record; -定義一上面記錄類型的變量beginselect ename,sal,job into v_emp_record from emp where empno=v_empno;dbms_output.put_line(名字:|v_emp_record.v_ename | 工資:|v_emp_record.v_sal | 工作:|v_emp_record.v_job);end;pl/sql表相當(dāng)于高級語言中的數(shù)組,但pl/sql表下

29、標(biāo)可以為負(fù)數(shù),并且表元素下標(biāo)沒有限制。c)參照變量參照變量是指用于存放數(shù)值指針的變量,通過使用參照變量,可以使得應(yīng)用程序共享相同對象,從而降低占用的空間。在編寫pl/sql程序時,可以使用游標(biāo)變量(ref cursor)和對象類型變量(ref obj_type)兩種參照變量類型 游標(biāo)變量(ref cursor)通過游標(biāo)可以取得返回結(jié)果集的任何一行數(shù)據(jù),從而提高共享的效率i 定義游標(biāo):type 自定義游標(biāo)名 is ref cursor;定義已定義游標(biāo)類型的變量:變量名 自定義游標(biāo)名;ii 打開游標(biāo):open 游標(biāo)變量 for select 語句;iii 取出當(dāng)前游標(biāo)指向的行:fetch 游標(biāo)變量

30、 into 其它變量;iv 判斷游標(biāo)是否指向記錄最后:游標(biāo)變量%notfoundv 游標(biāo)案例:create or replace procedure pro4(v_deptno number) istype hsp_emp_cursor is ref cursor;v_emp_cursor hsp_emp_cursor; -定義游標(biāo)變量v_ename emp.ename%type;v_sal emp.sal%type;beginopen v_emp_cursor for select ename,sal from emp where deptno=v_deptno;loop -循環(huán)語句取出數(shù)據(jù)

31、fetch v_emp_cursor into v_ename,v-sal;exit when v_emp_cursor%notfound: -當(dāng)游標(biāo)到末尾時退出dbms_output.put_line(用戶名:|v_ename| 薪水:|v_sal );end loop;close v_emp_cursor;-關(guān)閉游標(biāo)end;9.pl/sql 的進(jìn)階(1) 控制結(jié)構(gòu)a)條件分支語句:ifthen; ifthenelse; if-then-elsif-elsif-else;簡單條件判斷if-then案例解析:create or replace procedure pro5(in_ename v

32、archar2) isv_sal emp.sal%type;beginselect sal into v_sal from emp where ename=in_ename;if v_sal2000 thenupdate emp set sal=sal*1.1 where ename=in_ename;end if;end; 二重條件分支 if-then-elsea) 案例解析:b) create or replace procedure pro6(in_ename varchar2) isc) v_comm m%type;d) begine) select comm into v_comm

33、from emp where ename=in_ename;f) if v_comm0 theng) update emp set comm=comm+100 where ename=in_ename;h) elsei) update emp set comm=200 where ename=in_ename;j) end if;k) end; 多重條件分支:if-then-elsif-then-elsea) create or replace procedure pro7(in_empno number) isb) v_job emp.job%type;c) begind) select j

34、ob into v_job from emp where empno=in_empno;e) if v_job=PRESIDENT thenf) update emp set sal=sal+1000 where empno=in_empno;g) elsif v_job=MANAGER then -oracle中的比較是用=h) update emp set sal=sal+500 where empno=in_empno;i) elsej) update emp set sal=sal+200 where empno=in_empno;k) end if;l) end;b)循環(huán)語句 loo

35、p:pl/sql中最簡單的循環(huán)語句,以loop開頭,以end loop結(jié)尾,這種循環(huán)最少會被執(zhí)行一次,通過exit when 條件 語句退出當(dāng)前循環(huán)。案例解析:參考pro4;while循環(huán)只有條件為true時,才會執(zhí)行循環(huán)語句,以while.loop開始,以end loop結(jié)束案例解析:循環(huán)添加10個用戶都users表中,編號從200開始增加create table users(uno number,uname varchar2(32);create or replace procedure pro8(in_uname varchar2,in_n number) isv_uno number:

36、=200;beginwhile v_empno=200+in_n loopinsert into users values(v_uno,in_uname);end loop;end; for循環(huán)a) 基本結(jié)構(gòu):b) begini. for i in reverse 1.10 loopii. insert into users valuse(i,juan);iii. end loop;c) end;d) i是在隱含中增加,一般推薦用loop循環(huán)結(jié)構(gòu),不推薦使用for循環(huán) goto語句a) 用于跳轉(zhuǎn)到特定標(biāo)號去執(zhí)行語句,goto語句會增加程序的復(fù)雜性,并使得應(yīng)用程序可讀性變差,所以一般可不就就不用

37、b) 案例解析:i number:=1; beginloopdbms_output.put_line(輸出i=|i);if i=12 thengoto end_loop; -goto用于跳到標(biāo)號end if;i:=i+1;if i=10 thengoto start_loop;end if;end loop;end; -輸出結(jié)果是112(2)編寫分頁過程a) 無返回值的存儲過程參考前面;b) 有返回值的存儲過程(非列表) 案例解析:編寫一個過程,可以輸入雇員的編號,返回雇員的姓名create or replace procedure pro9(in_empno in number,out_en

38、ame out varchar2) isbeginselect ename into out_ename from emp where empno=in_empno;end;在java程序中調(diào)用c) 有返回結(jié)果的存儲過程(列表/集合) 一個包i. create or replace package pack1 isii. type my_cursor is ref cursor; -定義一個游標(biāo)數(shù)據(jù)類型iii. end; 建立存儲過程i. create or replace procedure pro10(in_deptno in number, out_result out pack1.my

39、_cursor) isii. beginiii. open out_result for select * from emp where deptno=in_deptno;iv. -為了在java程序可使用,在此還不能關(guān)閉游標(biāo)v. end; 在java程序中調(diào)用d) 分頁存儲過程案例解析:輸入表名、每示顯示數(shù)、當(dāng)前頁,返回返回果集。 建立包i. create or replace package pack2 isii. type my_cursor is ref cursor;iii. end; 編寫過程i. create or replace procedure Pro11(in_table

40、 in varchar2,in_pagesize in number,in_pagenow in number,out_result out pack2.my_cursor,out_rows out number,out_pagecount out number) isii. v_sql varchar2(2000);iii. v_start number;iv. v_end number;v. beginvi. v_start:=in_pagesize*(in_pagenow-1)+1;vii. v_end :=in_pagesize*in_pagenow;viii. v_sql:=sele

41、ct t2.* from (select t1.*,rownum rn from (select * from |in_tanble|) t1 where rownum=|v_start;ix. open out_result for v_sql;-打開游標(biāo),讓游標(biāo)指向結(jié)果集x. select count(*) into out_rows from emp;xi. if mod(out_rows,in_pagesize)=0 thenxii. out_pagecount:=out_rows/in_pagesize;xiii. elsexiv. out_pagecount:=out_rows/i

42、n_pagesize+1;xv. end if;xvi. end;(3) 視圖視圖是oracle的一種數(shù)據(jù)對象,主要用處是簡化操作,提高安全,滿足不同用戶的查詢需求,視圖不是一個真正存在的物理表,它是根據(jù)別的表,動態(tài)生成。a) 創(chuàng)建視圖create view 視圖名 as select語句with read only;當(dāng)帶了with read only時,就只能對該表進(jìn)行查詢操作b) 實(shí)例解析:create view empview as select empno,ename,job from emp;注:沒帶with read only可對視圖進(jìn)行任何操作,且在視圖的操作將更新到原表c) 在

43、多表查詢時可簡化操作create view myview as select emp.ename,dept.deptno,dept.dname from emp,dept where emp.deptno=dept.deptno with read only;創(chuàng)建view后可當(dāng)表用進(jìn)行查詢d) 視圖與表的區(qū)別i 表需要占用磁盤空間,視圖不需要ii 視圖不能添加索引iii 使用視圖可簡化復(fù)雜查詢vi 視圖有利于提高安全性(4) 觸發(fā)器a) 觸發(fā)器是指隱含的執(zhí)行的存儲過程。當(dāng)定義觸發(fā)器時,必須要指定觸發(fā)的事件和觸發(fā)的操作,常用的觸發(fā)事件包括insert,update,delete語句,觸發(fā)操作實(shí)際

44、就是一個pl/sql塊。b) 觸發(fā)器的分類:dml觸發(fā)器(增刪改),ddl觸發(fā)器(create.drop.),系統(tǒng)觸發(fā)器(與系統(tǒng)相關(guān)的觸發(fā)器,如登錄,退出,啟動數(shù)據(jù)庫,關(guān)閉數(shù)據(jù)庫.)c) 基本語法:createor replace trigger trigger_namebefore|afterinsert|delete|updateof column,column.on schema. table_namefor each row -表示一個行級觸發(fā)器when condition 條件begin trigger_body; end;d) 案例解析:在emp表添加一條數(shù)據(jù),并提示你添加了一條數(shù)

45、據(jù) create or replace trigger tri1 afterinsert on scott.empbegindbms_output.put_line(添加了一條數(shù)據(jù));end;案例解析2:禁止在休息日改變員工信息,通過before觸發(fā)器實(shí)現(xiàn)create or replace trigger tri2 beforeinsert or update or delete on scott.empbeginif to_char(sysdate,day) in (星期六,星期日) then-阻止刪除操作并提示錯誤信息,參數(shù)1是錯誤號,2是提示信息RAISE_APPLICATION_ERR

46、OR (-20001, 對不起,休息日不能修改員工信息);end if;end;f) 使用條件謂詞:inserting,updating,deletingcreate or replace trigger tri3 beforeinsert or update or delete on scott.empbegincasewhen inserting thenraise_application_error(-20002,禁止插入);when updating thenraise_application_error(-20002,禁止修改);when deleting thenraise_application_error(-200

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論