Oracle基礎(chǔ)知識大全,_第1頁
Oracle基礎(chǔ)知識大全,_第2頁
Oracle基礎(chǔ)知識大全,_第3頁
Oracle基礎(chǔ)知識大全,_第4頁
Oracle基礎(chǔ)知識大全,_第5頁
已閱讀5頁,還剩73頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、讀書之法, 在循序而漸進(jìn),熟讀而精思課程目標(biāo):1. 了解數(shù)據(jù)庫系統(tǒng)在項目開發(fā)中的地位2. 了解目前主流數(shù)據(jù)庫系統(tǒng)3. 熟練掌握查詢命令4. 熟練掌握數(shù)據(jù)操作方式5. 熟練使用數(shù)據(jù)庫內(nèi)置函數(shù)6. 掌握 pl/sql 程序設(shè)計語法結(jié)構(gòu)7. 掌握視圖8. 掌握存儲過程9. 掌握用戶自定義函數(shù)10. 掌握觸發(fā)器了解:1 .數(shù)據(jù)庫組件:1.1 實施應(yīng)用集群1.2 Oracle OLAP1.3 數(shù)據(jù)挖掘1.4 應(yīng)用程序接口1.5 網(wǎng)絡(luò)組件1.6 SQL Plus1.7 企業(yè)管理器OEM2 . 幾個版本間的差異:2.1 增加了服務(wù)器參數(shù)文件SPFILE2.2 使用了 OMF 免去了手工管理數(shù)據(jù)庫文件的繁瑣2

2、.3 支持多種數(shù)據(jù)庫塊大小2.4 會話可以自動調(diào)整PGA 的大小2.5 引入了列表分區(qū)課程內(nèi)容:1. 操作數(shù)據(jù)之前的準(zhǔn)備工作:1.1. 要保證有一個數(shù)據(jù)庫:1.2. 要保證創(chuàng)建一個表空間create tablespace hbjrdatafile 'E:dbshbjr.dbf' size 100M;1.3. 要創(chuàng)建一個用戶,用戶默認(rèn)的表空間就是你創(chuàng)建的表空間create user hbjridentified by orcldefault tablespace hbjr;/授權(quán)限:grant dba to hbjr;1.4. 用戶/密碼登錄:2. 表名/列字段名起名規(guī)范:2.1

3、. 使用常規(guī)字母和數(shù)字2.2. 長度不要超過302.3. 表名/列名不能重復(fù)2.4. 不能使用oracle 的保留字3. 數(shù)據(jù)類型3.1. char:定長,存儲單位-字節(jié) (bite)3.2. varchar2:變長,存儲單位-字節(jié)3.3. nchar:定長,存儲單位-字符3.4. nvarchar2:變長,存儲單位-字符3.5. date:日期類型,7 個字節(jié), 存儲著 -世紀(jì), 年, 月,日,時,分,秒3.6. timestamp:日期類型,11 個字節(jié),存儲著-世紀(jì),年,月,日,時,分,秒,毫秒3.7. number:數(shù)據(jù)類型(數(shù)值類型)3.8. clob:大字段類型,適合存儲純文本信息

4、(例如:*.txt文件 )3.9. blob:大字段類型,適合存儲二進(jìn)制文件(例如:圖)3.10. 定義數(shù)據(jù)類型的意義:3.10.1 能夠更有效,更直觀的描述外部數(shù)據(jù)信息3.10.2 從程序運(yùn)行角度來考慮,定義了一種數(shù)據(jù)類型,實際就是定義了一種存儲格式和在此格式上的運(yùn)算方式,也就是數(shù)據(jù)結(jié)構(gòu)+算法,通過這種預(yù)先定義的機(jī)制,計算機(jī)可以加快程序運(yùn)行的速度。4. 創(chuàng)建表 /修改表/刪除表(DDL)4.1. 創(chuàng)建表:4.1.1 語句格式:create table tableName(colName dataType,colName dataType);4.1.2 規(guī)范 :4.1.2.1 列字段至少要有一

5、個4.1.2.2 列字段名稱后必須跟著數(shù)據(jù)類型4.1.2.3 如果有兩個及兩個以上的字段,那么字段之間用逗號(,)分隔4.1.2.4 列名稱不允許重復(fù)(在表中不得重復(fù))4.1.2.5 表名稱不允許重復(fù)(在數(shù)據(jù)庫中不得重復(fù))4.1.3 示例:create table test(tid char(10),tname varchar2(20);4.2. 刪除表:4.2.1 語句格式:drop table tableName;4.2.2 示例:drop table test;4.3. 更改表4.3.1 添加一個列:格式: alter table tableName add columnNamedata

6、Type;示 例 : alter table student add addr varchar2(100);4.3.2 刪除一個列:格 式 : alter table tableName drop column columnName;示例: alter table student drop column addr;4.3.3 添加多個列:格式: alter table tableName add( columnName1 dataType,columnName2 dataType, colunmName3 dataType );示例: alter table student add (addr

7、 varchar2(100), age int,dept varchar2(50);4.3.4 刪除多個列:格式: alter table tableName drop (columnName1,columnName2);示例: alter table student drop (addr,age);4.3.5 更改一個列(更改列的定義-數(shù)據(jù)類型)格 式 : alter table tableName modify columnName newDataType;示 例 : alter table student modify dept varchar2(100);4.3.6 更改多個列:格式:

8、 alter table tableName modify( columnName1 newDataType,columnName2 newDataType, colunmName3 newDataType );示例: alter table student modify( stu_no char(20),stu_name varchar2(20),dept varchar2(60);4.3.7 更改列名稱:格式: alter table tableName rename column oldColumnName to newColumnName;示例: alter table student

9、 rename column dept to sDepartment;注釋:alter, drop, create屬于DDL 語言5. 增加/刪除/修改:5.1. 往表里插入一條數(shù)據(jù):5.1.1 插入若干列的值:格 式 : insert into tableName(columnName1,columnName2)values ('value1',value2);5.1.2 插入全部列的值:格式: insert into tableNamevalues(有多少個列字段此處就賦值多少個 );5.2. 從表里刪除數(shù)據(jù)格式: delete from tableName where -

10、 條件或者 : tauncate table table_name<!-tauncate: 截斷表->5.3. 修改表記錄:格式: update tableName set columnName=newValue where - 條件6. 查詢:6.1. 查詢?nèi)繑?shù)據(jù)格式: select * from tableName-查詢?nèi)繉W(xué)生的信息-示例:select * from student;6.2. 查找特定的列(若干列 )格式:select columnName from tableName;- 查詢所有學(xué)生的姓名-示例: select stu_name from student

11、;6.3. 查找符合條件的部分?jǐn)?shù)據(jù)用 where 表示過濾的條件格式: select * from tableName where - 條件- 查詢所有機(jī)電系的學(xué)生信息-示例: select * from student where sdepartment='jdx'6.4. 列別名格式1 :columnName alias格式2:columnName as alias格式3:columnName as "alias"示例: select stu_no 學(xué)號 ,stu_name 姓名 ,sdeaprtmentfrom studnet;6.5. distinc

12、t: 消除重復(fù)行格式: select distinct columnName from tableName;-查詢院里都設(shè)置了那些系別-示例:select disctinct sdepartment from studnet;6.6. 查詢常量:格式:select 'finalData' from tableName;示例: select stu_name,'河套大學(xué)' from student;6.7. 使用表達(dá)式(算術(shù)表達(dá)式/關(guān)系表達(dá)式/邏輯表達(dá)式/連接運(yùn)算符/模糊查詢/范圍查詢)6.7.1 關(guān)系表達(dá)式:=,>=,>,<=,<,<

13、;>,!=- 查詢所有分?jǐn)?shù)>=60 的學(xué)生的信息:-示例 : select * from student where grade>=60;6.7.2 范圍運(yùn)算符:between and, in- 查詢所有分?jǐn)?shù)在60-80 這個范圍的學(xué)生的信息-select * from student where grade between 60 and 80;- 查詢所有機(jī)電系,師范系, 藝體系的學(xué)生的信息-select * from student where sdepartment in('jdx','sfx','ytx');6.7.3

14、模糊查詢:like一般和 like 搭配使用的符號: %, _- 查詢所有姓zhao 的同學(xué)的信息-示例 :select * from student where stu_name like 'zhao%'- 查詢所有姓zhao的并且名字只有一個字的同學(xué)的信息-示例: select * from studnet where stu_name like'zhao_'6.7.4 邏輯表達(dá)式:and,or,not- - 查詢所有機(jī)電系或者醫(yī)學(xué)院系的學(xué)生的信息 -示 例 : select * from student where sdepartment='jdx

15、' or sdepartment='yxy'- - 查詢所有機(jī)電系的并且成績>=60 的學(xué)生示 例 : selectfrom student wheresdepartment='jdx' and grade>=60;- - 查詢所有不是藝體系的學(xué)生的信息-示 例 : select * from student where not (sdepartment='ytx');6.7.5 連接運(yùn)算符:| 將若干個字段或者字符串拼接而成一個列- 將學(xué)生的姓名和成績拼接然后顯示-示例: select stu_name | '的成績

16、是:' | grade成績信息from studentwhere stu_no = 5555;6.7.6 null: 是未分配的,或者未知的,或者不可用的6.7.6.1 如何插入null 值:- 將學(xué)生的姓名和系別分別置空示 例 : insert into studentvalues(123,null,null,0);6.7.6.2 如何查詢null 值:- 查詢所有姓名為空的學(xué)生的信息-示例 : select * from student where stu_name is null;6.7.6.3 如何修改null 值:- 將所有姓名為空的學(xué)生重命名為 ' 待定'

17、-示例: update student set stu_name ='待定 'where stu_name is null;6.7.6.4 如何刪除null 值:- 將所有姓名未知的學(xué)生記錄刪除 -示 例 : delete from student where stu_name is null;6.7.6.5 null 參與運(yùn)算的結(jié)果:a. 參與數(shù)學(xué)運(yùn)算:結(jié)果為nullb. 參與關(guān)系運(yùn)算:忽略c. 參與邏輯運(yùn)算:ANDTRUEFALSENULLTRUETRUEFALSENULLFALSEFALSEFALSEFALSENULLNULLFALSENULLORTRUEFALSENUL

18、LTRUETRUETRUETRUEFALSETRUEFALSENULLNULLTRUENULLNULLd. 參與連接運(yùn)算:為null 的字段其值處理為空的字符串e. 參與排序,其值最大6.8 order: 排序-asc:升序,默認(rèn)的,desc-降序6.8.1 order by 總是在 where 條件之后出現(xiàn)- 將所有學(xué)生的信息按照分?jǐn)?shù)降序排列示例: select * from student order by grade desc;6.8.2 當(dāng) order by 中出現(xiàn)兩個或者兩個以上的字段排序是先是按照第一個出現(xiàn)的字段整體排序然后在第一個字段值相同的情況下再按照第二個字段進(jìn)行排序然后在第

19、一個和第二個字段都相同的情況下再按照第三個字段進(jìn)行排序依次類推- 查詢所有的學(xué)生信息,按照分?jǐn)?shù)降序,編號升序的順序進(jìn)行排列-示例: select * from student order by grade desc, stu_no asc;6.9 系統(tǒng)函數(shù):6.9.1 系統(tǒng)函數(shù)無一例外都是提供某種功能的,例如:nvl6.9.2 幾乎總是出現(xiàn)在字段名的前面6.9.3 分類:a.字符函數(shù)b.數(shù)值函數(shù)c.日期函數(shù)d.轉(zhuǎn)換函數(shù)-to_char,to_date,to_numbere.通用函數(shù)f. 分組函數(shù)f.1 max(), min(), avg(), count(), sum()f2. decode(

20、)6.9.4 操作日期函數(shù):1. 插入系統(tǒng)當(dāng)前時間:示例: insert into emp(empno,ename,hiredate) values(8010,'zhuaoshuai',sysdate);2. 插入指定的時間(按oracle數(shù)據(jù)庫默認(rèn)格式插入 )示例: insert into emp(empno,ename,hiredate) values(8020,'panzhiming','01-2 月 -11');3. 插入指定格式的日期:示例: insert into emp(empno,ename,hiredate)values(803

21、0,'tudou',to_date('2011/01/01','yyyy/mm/dd');insertintotest1 (t2 )values ( to_date ( '2013-10-1013:13:13' , 'yyyy-mm-dd hh24:mi:ss' );6.10 group 子句:6.10.1 功能:對數(shù)據(jù)進(jìn)行分組- 查詢各個崗位的職員人數(shù)-示例: select job ,count(job) from emp groupby (job);<!-count: 計數(shù)->6.11 having

22、: 對 group by 子句再次過濾- 查詢部門人數(shù)>=4 的所有部門示例: select deptno,count(deptno) from empgroup by (deptno) having count(deptno)>=4;1.12 連接查詢:1.12.1 內(nèi)連接-邊表的數(shù)據(jù)得匹配上,任何一方如果和對方表沒有匹配的數(shù)據(jù),則會被過濾掉a. 等值連接:-查詢在 紐約 工作的員工信息:select e.*from emp e,dept dwhere e.deptno = d.deptno and d.loc = 'NEWYORK'-查看員工員工信息及其工作地s

23、electempno,ename,job,sal,comm,e.deptno,dname,locfrom emp e, dept dwhere e.deptno = d.deptno;b. 非等值連接:-查詢工資級別是3 的員工的信息:select e.*from emp e, salgrade swhere e.sal >= s.losal and e.sal <= s.hisal ands.grade = 3-查看員工編號,姓名,崗位,薪水及其薪水級別select empno,ename,job,sal,gradefrom emp e, salgrade sgwhere e.s

24、al > sg.losaland e.sal <=sg.hisal;1.12.2 外連接-主表數(shù)據(jù)全部保留,子表數(shù)據(jù)需要a. 左外連接:以左表為主-查看車輛信息及其車主的信息select cid,cname,phone, c1.car_id,producer,price,produe_datefrom cars c1, customers c2where c1.car_id = c2.car_id(+);- 查看員工信息,如果有所屬部門則顯示其部門信息select e.*, d.*from emp e, dept dwhere e.deptno = d.deptno(+);b. 右

25、外連接:以右表為主-查看顧客信息及其所購車的信息select cid,cname,phone, c1.car_id,producer,price,produe_datefrom cars c1, customers c2where c1.car_id(+) = c2.car_id;- 查詢所有部門信息,如果該部門有員工則顯示其員工信息select d.*, e.*from emp e, dept dwhere e.deptno(+) = d.deptnoc. 全連接:左右兩表不分主次,保留全部數(shù)據(jù)-查詢所有員工和部門的信息:select e.*, d.*from emp efull outer

26、 join dept don e.deptno = d.deptno1.12.3 自連接:將一個表當(dāng)成多個表用-查詢員工的編號,姓名,及其經(jīng)理編號,姓名selectworker.empno,worker.ename,worker.mgr,manager.enamefrom emp worker, emp managerwhere worker.mgr = manager.empno;selectworker.empno,worker.ename,worker.mgr,manager.enamefrom emp worker, emp managerwhere worker.mgr = mana

27、ger.empno(+);上述多表連接的另一種寫法:55select table1.columnName, table2.columnNamefrom table1inner | left | right | full join table2on table1.columnName = table2.columnName注意:如果使用(+)操作符指定外連接,則必須使用where 子句指定連接條件如果使用關(guān)鍵字指定內(nèi)、外連接,則必須使用on子句指定連接條件1.13 子查詢:示 例 : select * from emp where deptno=(select deptno from dept

28、where loc='NEW YORK');查詢所有在紐約工作的職員的信息1.13.1 單行子查詢:返回單個結(jié)果,一般和關(guān)系運(yùn)算符結(jié)合使用示例: 查詢所有在紐約工作的職員的信息select * from emp where deptno=(select deptno from dept where loc='NEW YORK');1.13.2 多行子查詢:返回多個結(jié)果,一般和in, all, any, exists 結(jié)合使用示例: 查詢和 MARTIN 和 SMITH 同一個部門的職員的信息select *from empwhere job in(select

29、jobfrom empwhere ename = 'MARTIN'or ename = 'SMITH');1.13.3 多列子查詢: 返回多個列值,有可能單行或多行示例: 查詢和 ALLEN 同部門且同崗位的職員的信息(單行 ) select *from emp where (deptno,job) = ( select deptno, job from emp where ename = 'ALLEN'); 查 詢 和 ALLEN 同 部 門 且 同 崗 位 或 者 和SMITH 同部門且同崗位的職員的信息(多行) select * from

30、emp where (deptno,job) IN (select deptno, job from emp where ename = 'ALLEN'or ename = 'SMITH');1.13.4 相關(guān)子查詢:子查詢和主查詢相互依賴,但是主查詢只關(guān)心子查詢有無返回值,而不關(guān)心子查詢返回的內(nèi)容示例: 查詢至少有一個員工的部門的信息-select deptno, dnamefrom dept dwhere exists(select 'y'from emp ewhere e.deptno = d.deptno);1.14 聯(lián)合結(jié)果集:unio

31、n( 無條件連接),minus( A 減 B 的結(jié)果) ,intersect, merge(融合)融合:示例:create table day_balance_table(eid char(5),ename varchar2(20),esal number);create table month_balance_table as select * from day_balance_table;insert into day_balance_table values('001','zhang',100);insert into day_balance_table

32、values('002','wang',200);insert into day_balance_table('003','li',300);merge into month_balance_table musing day_balance_table don(m.eid = d.eid)when matched thenupdate set m.esal=d.esalwhen not matched theninsert(m.eid,m.ename,m.esal)values(d.eid,d.ename,d.esal);upda

33、te day_balance_tableset esal = 400 where eid = '001'insert into day_balance_table values('004','eniay',500);merge into month_balance_table musing day_balance_table don(m.eid = d.eid)when matched thenupdate set m.esal=d.esalwhen not matched theninsert(m.eid,m.ename,m.esal)valu

34、es(d.eid,d.ename,d.esal);1.15 分頁查詢:將rownum 固化select rn 序號 , empno 員工編號, ename 姓名 , job職位 , sal 工資from(select rownum rn, empno, ename, job, salfrom(select empno, ename, job, salfrom emporder by sal desc) t1) t2 where rn >=4 and rn<=6;1.16 層次查詢:select level 層次 , empno 編號 , ename 姓名 , mgr 經(jīng)理編號fro

35、m empstart with mgr is nullconnect by mgr = prior empno;select (lpad(' ', 4*(level-1), ' ') | empno | '-' | ename)員工管理層次from empstart with mgr is nullconnect by mgr = prior empno;1.17 top-n:rownum 使用時注意select *from empwhere rownum <3order by sal;select *from (select * from

36、 emp order by sal) twhere rownum < 37. 各種約束:7.1 not null: 不為空, 此列輸入的值不允許為空,允許重復(fù)7.2 unique: 唯一約束7.2.1 此列不允許輸入重復(fù)的值,但是允許輸入若干次空值7.2.2 有兩種定義unique 約束的方法:a. 直接在要定義約束的列字段后面寫:unique 就可以了b. 不在列字段后緊跟著,而是在表的最后定義約束,格式如下:constraintconNameconType(colunmName)- 為列 sid 定義唯一約束-示 例 : constraint student_sid_ukunique

37、(sid)7.2.3 當(dāng)定義一個unique 同時約束若干個字段時,只要這幾個字段的組合不重復(fù)就可以7.3 primary key: 主鍵,不允許為空且不允許重復(fù)7.3.1 此列不允許為空并且不允許重復(fù)7.3.2 有兩種定義primary key 的方法 :a. 直接在要定義約束的列字段后面寫:primary key 就可以了b. 不在列字段后緊跟著,而是在表的最后定義約束,格式如下:conNameconstraintconType(colunmName)- 將列 sid 設(shè)置為主鍵 示例: constraint student_sid_pk primarykey(sid)7.3.3 一個表只

38、允許定義一個primary key7.4 check:一般是對列值的取值范圍作約束(自定義完整性)constraint conName conType(把列值的取值范圍規(guī)定好)- 規(guī)定成績表中的成績字段取值范圍在0-150之間-示 例 :constraint grade_ggrade_ckcheck(ggrade>=0) and (ggrade<=150);7.5 foreign key: 主要是約束數(shù)據(jù)完整性的 為成績表做一個外鍵映射關(guān)聯(lián)到主表學(xué)生表,以保證成績表的學(xué)生學(xué)號都是已存在的 示例: 1. 創(chuàng)建表時做外鍵映射:create table grade(gid char(10

39、) ,cj number(3), constraint grade_stu_fk foreignkey(gid) references student(sid);讀書之法, 在循序而漸進(jìn),熟讀而精思2. 表創(chuàng)建好后做外鍵映射的格式:alter table grade add constraint grade_stu_fk foreign key(gid) references student(sid);7.6 default:插入或修改數(shù)據(jù)時,此列如果沒有插入值則為其設(shè)置默認(rèn)值8. 次重要內(nèi)容:8.1 視圖:創(chuàng)建,刪除,使用-查詢8.1.1 創(chuàng)建:示例:create or replace vi

40、ew salry_viewasselect ename, (nvl(sal,0) + (nvl(comm,0) salary from emp;8.1.2 使用:和查詢表的操作是一樣的示例:select * from salry_viewwhere ename = 'ALLEN'drop view salry_view;8.1.4 優(yōu)點:a. 限制對表的數(shù)據(jù)的訪問b. 可以使復(fù)雜的查詢變得簡單c. 提供了數(shù)據(jù)的獨立性d. 提供了對相同數(shù)據(jù)的不同顯示方式8.2 序列:創(chuàng)建,使用,刪除用途:每次調(diào)用時自動增加一個步長值,然后將增加后的值返回8.2.1 創(chuàng)建:示例:create se

41、quence seq_stu_sidincrement by 3<!-increment: 自增長->start with 10nomaxvaluenocycle nocache8.2.2 使用:和查詢表的操作是一樣的 示例:select seq_stu_sid.nextval from dual;8.2.3 刪除:drop sequence seq_stu_sid;8.3 自定義函數(shù):創(chuàng)建,調(diào)用,刪除8.3.1 用途:就是提供某種功能的8.3.2 創(chuàng)建:示例:create or replace function salaryFun(eno emp.empno%type)retur

42、n varchar2asbegin 代碼 ;end;8.3.3 使用:和系統(tǒng)函數(shù)的用法類似示例:select salaryFun(7369) from dual;8.3.4 刪除:drop function salaryFun;8.3.5 示例:-創(chuàng)建一個函數(shù)create or replace function salaryFun(eno emp.empno%type)return varchar2 -聲明返回值類型asv_salary number;-聲明變量beginselect (nvl(sal,0)+(nvl(comm,0) into v_salary from emp where e

43、mpno=eno;return(eno | '的總收入是:' | v_salary);end salaryFun;- 使用自定義函數(shù)select salaryFun(7499) from dual;8.4 存儲過程:創(chuàng)建,調(diào)用,刪除8.4.1 用途:提供某種功能的,往往是一次性執(zhí)行若干條 DML 語句的8.4.2 創(chuàng)建:create or replace procedure stuinsertasbegin代碼段 ;end;8.4.3 使用:有兩種方法可以調(diào)用存儲過程8.4.4 刪除:drop procedure stuinsert;8.4.5 示例 1:無參存儲過程- 創(chuàng)建一

44、個存儲過程,一次性插入100 條數(shù)據(jù) - - 1. 創(chuàng)建表 -create table student(sid char(10), sname varchar2(20);- - 2. 往 student表里一次性插入100 條數(shù)據(jù)create or replace procedure stuInsertasbeginfor v_temp in1.500 loopinsert into student values(to_char(v_temp),'dfdf');end loop;end;- - 3. 調(diào)用存儲過程- -3.1 第一種調(diào)用方法beginstuinsert;end;

45、- -3.2 第二種調(diào)用方法:命令-execute stuinsert;8.4.6 傳入?yún)?shù):- 根據(jù)員工編號修改其工資信息-create or replace procedure change_salary2(v_empno in number, v_new_sal in number)as beginupdate empset sal = v_new_salwhere empno = v_empno;commit;end;8.4.7 傳出參數(shù):- 根據(jù)員工編號獲取其工資信息-create or replace procedure getSalaryByNo(v_empno in numbe

46、r, v_sal out number)asbeginselect sal into v_salfrom empwhere empno = v_empno;end;declarev_sal number;begingetSalaryByNo(7499, v_sal);dbms_output.put_line(' 員工工資:' | v_sal);end;- 根據(jù)員工編號獲取其姓名信息-create or replace procedure getNameByNo(v_empno in number, v_ename out varchar2)asbeginselect ename

47、 into v_enamefrom empwhere empno = v_empno;end;declarev_ename emp.ename%type;begingetNameByNo(7900, v_ename);dbms_output.put_line(' 員工姓名:' | v_ename);end;8.4.8 傳入、傳出參數(shù):- 根據(jù)員工編號獲取其工資信息create or replace procedure getSalaryByNo2(v_numin out number)asbeginselect sal into v_numfrom empwhere empno

48、 = v_num;end;declarev_num number;beginv_num := 7876;getSalaryByNo2(v_num);dbms_output.put_line(v_num | '員工的工資:' | v_num);end;8.4.9 優(yōu)點:a. 大大增強(qiáng)了sql 語言的功能和靈活性b. 可保證數(shù)據(jù)的安全性和完整性c. 改善 sql 語句的性能,執(zhí)行速度快d. 可以降低網(wǎng)絡(luò)的通信量e. 使提現(xiàn)企業(yè)規(guī)則的運(yùn)算程序放入數(shù)據(jù)庫服務(wù)器中以便集中控制8.4.10 存儲過程與自定義函數(shù)的區(qū)別:a. 參數(shù)模式:前者可以使in,out, 后者只能是inb. retur

49、n: 前者不包含,后者必須包含c. 執(zhí)行方式:前者可以用execute 語句執(zhí)行,后者不可以8.5 觸發(fā)器:創(chuàng)建,刪除8.5.1 用途:監(jiān)控某種事件的發(fā)生,一旦事件發(fā)生了系統(tǒng)會自動調(diào)用8.5.2 創(chuàng)建:create or replace trigger stuinsert_triggerbefore|afterinsert|delete|update on student(在操作之前/之后觸發(fā))(觸發(fā)代碼的操作類型)(操作的表)begin被觸發(fā)的操作代碼段;end;8.5.3 調(diào)用:當(dāng)監(jiān)控的操作一旦發(fā)生則觸發(fā)器就被系統(tǒng)自動調(diào)用8.5.4 刪除:drop trigger stuinsert_tr

50、igger;8.5.5 示例:- 創(chuàng)建一個觸發(fā)器create or replace trigger stuInsert_triggerafter insert on studentbegindbms_output.put_line(' 您在學(xué)生表上進(jìn)行了插入操作 !');end; 觸發(fā)觸發(fā)器的insert into student values('121','dfdsf');8.5.5.1 語句級別觸發(fā)器:一條語句觸發(fā)一次示例: - 如果在非工作日的非工作時間插入數(shù)據(jù)則操作不成功-create or replace trigger secure_

51、deptbefore insert on deptbeginif(to_char(sysdate, 'DY') in (' 星期六 ', '星期日 ')or (to_char(sysdate, 'HH24:MI') notbetween '08:00' and '18:00')thenraise_application_error(-20001, 'you caninsert into the table of dept only in work time!');end if;end

52、;-向 dept表 插入數(shù)據(jù)測試觸發(fā)器是否工作:insert into deptvalues(2345,'SOFT', 'HZ');8.5.5.2 行級觸發(fā)器:一行就觸發(fā)一次示例:- 如果工作崗位不是MANAGER 或者 ANALYST ,則工資不能超過5000 -create or replace trigger restrict_salbefore insert or update of sal on empfor each rowbeginif (not(:new.job in ('MANAGER', 'ANALYST')

53、and :new.sal > 5000thenraise_application_error(-20002, '普通員工不能賺到這么多薪水');end if;end;-向 emp 表 插入或者修改數(shù)據(jù)測試insert into emp(empno, ename, job, sal) values(7941, 'Eniyah', 'CLERK', 3000);insert into emp(empno, ename, job, sal) values(7942, 'Phennma', 'CLERK', 5500

54、);update empset sal = 5001 where empno = 7941;讀書之法, 在循序而漸進(jìn),熟讀而精思8.6 同義詞 :類似于對象的別名,可以代替對象的原名稱進(jìn)行使用8.6.1 創(chuàng)建:create synonym synName for object;-當(dāng)前用戶可用或者:同義詞;同義字create public synonym synName for object;-所有用戶可用8.6.2 示例:create synonym t1 for test1;為 test1 表創(chuàng)建同義詞后,則可以把t1 當(dāng)成test1 表使用8.6.3 用途:a. 可以方便的訪問其他對象b.

55、 可以縮短對象名字的長度c. 在分布式數(shù)據(jù)庫中,它可以使用戶操作遠(yuǎn)程對象像操作本地對象一樣方便drop synonym t1;8.7 包:8.7.1 用途可以將 多個功能或用途相近的程序單元(存儲過程或者函數(shù)等)組合到一起形成一個邏輯上的集合8.7.2 創(chuàng)建create or replace package tp1asfunction salaryFun(enoemp.empno% type )return varchar2 ;procedurechange_salary2(v_empnoin number ,v_new_sal in number );proceduregetSalaryByNo(v_empnoin number ,v_sal out number );end t

溫馨提示

  • 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

提交評論