Oracle知識點總結_第1頁
Oracle知識點總結_第2頁
Oracle知識點總結_第3頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、ZealjiangOracle知識點總結根據(jù)閻赫老師講義整理1、Oracle數(shù)據(jù)庫的安裝和配置OracleInternet級數(shù)據(jù)庫SQLServer中小企業(yè)級數(shù)據(jù)庫Access桌面級數(shù)據(jù)庫Oracle的安裝注意:來源和目標的目錄不允許有中文或空格Oracle數(shù)據(jù)庫啟動時必需開啟的后臺服務 OracleOrahome90TNSListener使第三方的軟件或語言訪問 OracleServiceETCOracle的實例CRUD增刪改查注意:中的ETC是你起的實例的名字Oracle的開發(fā)工具 DO翳面的開發(fā)平臺->運行->sqlplus Oracle本身基于DOS勺平臺->運行-&

2、gt;sqlplusw OracleEnterpriseManagerConsolePL/SQLDeveloper7.1.5創(chuàng)建一個表的完整流程 創(chuàng)建一個數(shù)數(shù)庫例子:創(chuàng)建一個數(shù)據(jù)庫ETC,物理文件放在F:,初始化1m,白增長開啟createtablespaceetcdatafile'f:etc.dbfsize1mautoextendon;刪除表空間droptablespace數(shù)據(jù)庫名稱;為該數(shù)據(jù)庫創(chuàng)建一個帳號和密碼語法:createuser用戶名稱identifiedby密碼defaulttablespace數(shù)據(jù)庫名稱注意:1、在Oracle中賬號和數(shù)據(jù)庫one2one綁定、Oracl

3、e的密碼不允許為純數(shù)字或空、需要在system賬號完成動作修改Oracle的賬號密碼語法:alteruser用戶identifiedby新密碼用grant權限to用戶為該帳戶授權語法:grant權限名稱to用戶;撤銷權限語法:revoke權限名稱from用戶名;在該帳號下創(chuàng)建表Oracle中的事務處理Transacation事務特點:整體提交(commit)整體回滾(rollback)事務的四個特性原子性不可分割持久性->當數(shù)據(jù)整整寫入到數(shù)據(jù)庫物理文件中后,該數(shù)據(jù)被持久化隔離性->事務之間相互獨立互不干擾一致性->數(shù)據(jù)安全Oracle中的保留點(還原點)關鍵字:savepoi

4、nt使用方法:savepoint名稱;如進行保留點回滾rollbacktomark2Oracle備份數(shù)據(jù)表數(shù)據(jù) createtable備份表名稱as查詢語句; Oracle備份表結構createtableemp_bakasselect*fromempwhere1=2;2、Oracle的函數(shù)function(系統(tǒng)預定義函數(shù))函數(shù)和存儲過程相比,在于函數(shù)必須有返回值,而存儲過程只有輸出參數(shù)。語法:函數(shù)名稱createorreplacefunctionreturn返回類型asPL/SQL語句塊例子:輸入一個員工工號,返回該員工所在部門平均工資createorreplacefunctionfun_de

5、mo1(enoemp.empno%type)returnemp.sal%typeasavgsalemp.sal%type;beginselectavg(sal)intoavgsalfromempwhereempno=eno;returnavgsal;end;調用:selectfun_demo1(7788)fromdual;publicintadd(intnum1,intnum2)intres=0;res=num1+num2;returnres;單行函數(shù)(單值函數(shù)):函數(shù)有且只有返回1個值substrinstr 字符函數(shù)|-字符串連接函數(shù):concatconcat(字符串1,字符串2) Orac

6、le中字符連接操作符號|字符串對齊函數(shù):lpad->leftpadding左填充/rpad語法:lpad(字符串,預留位置,填充字符)SQL:selectlpad(ename,10,'')fromemp;字符串截取函數(shù):substr->substring語法:substr(字符串,截取的起始位置,截取個數(shù))substr(字符串,截取的起始位置)SQL:>selectsubstr(ename,1,3)fromeemp;字符查找函數(shù):instr->innerstring語法:instr(字符串,待找的字符,查找的起始位置,出現(xiàn)次數(shù))SQL:>selec

7、tename,instr(ename,'T',1,1)fromemp;注意:當返回值為0時,字符不存在函數(shù):initcap->initialcaptor語法:initcap(字符串)SQL:>selectinitcap(ename)fromemp;函數(shù):length語法:length(字符串)SQL:>select*fromempwherelength(ename)=5;函數(shù):lower/upper)字符串lower(語法:SQL:>selectlower(ename)fromemp; |-日期函數(shù)sysdateadd_months函數(shù):sysdateS

8、QL:>selectsysdatefromdual;dual-無實際意義,函數(shù)測試或其他測試使用月份差:months_between語法:months_between(日期1,日期2)SQL:>select*fromempwheremonths_between(sysdate,hiredate)>=144函數(shù):last_day語法:last_day(日期數(shù)據(jù))SQL:>select*fromempwherelast_day(hiredate)-2=hiredate;函數(shù):add_months語法:add_months(時間,添加月份)SQL:>selectadd_

9、months(sysdate,3)fromdual;|-轉換函數(shù)to_charto_date轉換函數(shù)to_char語法:to_char(時間數(shù)據(jù),制定格式)SQL:>selectto_char(sysdate,'yyyy-mm-ddhh24:mi:ssddddday')fromdual;yyyy-mm-dd年月曰hh24:mi:ss時分秒(24)d一周第幾天ddd一年的第幾天day星期幾 to_date:將文本類型數(shù)據(jù)按照制定格式轉換成時間類型數(shù)據(jù)語法:to_date('具體的時間字符數(shù)據(jù)','時間字符串格式')to_date('2

10、010-01-19','yyyy-mm-dd')注意:Oracle中的date字段類型及其特殊|-數(shù)學函數(shù)absceilfloorabs(n)絕對值ceil(n)向上取值ceilling天花板ceil(1.1)->2floor(n)向下取值floor地板floor(2.9)->2mod(m,n)求模取余mod(5,2)->1power(m,n)m的n次方power(2,8)->256round(m,n)四舍五入m待處理數(shù)據(jù)n精度round(3.1415,2)->3.14trunc(m)整數(shù)截取trunc(3.1415)=3sign(m)符號

11、sqrt(m)平方根|-混合函數(shù)usernvl返回當前登錄賬號user:SQL>selectuserfromdual;nvl:替空函數(shù)語法:nvl(字符串,替換后的數(shù)據(jù))注意:替換后的數(shù)據(jù)必須與該字段類型保持一致SQL>selectename,nvl(comm,0)fromemp;分析函數(shù):數(shù)據(jù)分析和挖掘功能DataMiningrankdense_rank作用:主要用于排名使用函數(shù):rank語法:rank()over(orderby字段名稱)SQL:>selectrank()over(orderbysaldesc),ename,salfromemp;若排名相同下一個將跳轉SQ

12、L:>selectdense_rank()over(orderbysaldesc),ename,salfromemp;連續(xù)語法:rank(參數(shù)1,參數(shù)2)withingroup(orderby字段1,字段2)SQL:>selectename,rank(2850,'BLAKE')withingroup(orderbysal,ename)fromemp;分組函數(shù):類似于SQLServer中的聚合函數(shù)sumavgcountgroupby分組關鍵字having條件3、Oracle數(shù)據(jù)庫的查詢制定區(qū)間查詢都)包括用戶白定義創(chuàng)建的數(shù)據(jù)表(為每張數(shù)據(jù)表Oracle中偽列:Orac

13、le白動創(chuàng)建兩個位列分別是:rowid、rownum通過命令:SQL>desc表名;-查看表結構rowid:由18個字符組成唯一標識每一行rownum:行號介紹問題:使用Oracle分層查詢以數(shù)據(jù)結構顯示emp表中的人員關系語法:selectlpad(ename,level*5,'')fromempconnectbypriorempno=mgrstartwithmgrisnull;并集:查詢部門10的辦事員和部門20的經理關鍵字:unionallselect*fromempwheredeptno=10andjob='CLERK'unionallselect

14、*fromempwheredeptno=20andjob='MANAGER'注意:unionall不會消除查詢結果中的重復數(shù)據(jù),union會消除查詢結果中的重復記錄交集:查詢部門10和部門20都有的工作類型關鍵字:intersectselectjobfromempwheredeptno=10intersectselectjobfromempwheredeptno=20;差集:查詢部門30中有,而部門10中沒有的工作類型minus關鍵字:selectjobfromempwheredeptno=30minusselectjobfromempwheredeptno=10;4、Orac

15、le數(shù)據(jù)庫的數(shù)據(jù)對象Oracle的數(shù)據(jù)庫對象:用戶、表、約束、序列、視圖、同義詞和索引定義:但凡使用create開頭創(chuàng)建的對象稱之為數(shù)據(jù)庫對象。鎖定/解除用戶語法:alteruser用戶名稱accountlock;注意:該指令一般在system賬號下輸入解除用戶鎖定語法:alteruser用戶名稱accountunlock;SQL>alteruserscottaccountunlock;注意:Oracle11g中scott賬號是默認鎖定的,需要進行解鎖處理。用戶授權/撤銷grant權限名稱to用戶名稱;撤銷用戶權限revoke權限名稱from用戶名;表數(shù)據(jù)字段的類型數(shù)字類型:number

16、)精度,長度number(語法:number(5,2)數(shù)字長度為3,精度為2范圍:-999.99999.99number(5)數(shù)字長度為5,精度為0范圍:-9999999999number精度默認為0范圍:-3276732768 字符類型:varchar2可變長度char字符類型語法:varchar2(長度) 日期類型:date long數(shù)據(jù)類型:該字段最大存儲空間為2GB該字段不允許添加索引LOB數(shù)據(jù)類型:該字段最大存儲空間為4GB該字段不允許添加索引CLOB:大子符類型->文章(小說,cnki)BLOB:大一進制類型->圖片、首碩、視碩.多媒體文件FLOB:文件定位器->

17、內存指針創(chuàng)建數(shù)據(jù)表的語法結構:createtable表名(字段名稱1類型約束,字段名稱1類型約束,字段名稱n類型約束)使用desc表名查看表結構telephone和address給表添加字段語法:altertable表名add(字段名稱類型);刪除表字段address語法:altertable表名dropcolumn字段名稱; 修改表中已有字段的類型語法:altertable表名modify(字段名稱新類型); 修改表名稱語法:rename原表名to新表名;約束完整性約束=準確性+一致性約束的四大分類: 實體完整性約束(行約束)->盡量減少數(shù)據(jù)表中數(shù)據(jù)的冗余(重復的數(shù)據(jù))技術實施:主鍵約

18、束、唯一約束語法:altertable表名addprimarykey(字段名稱);altettable表名addunique(字段名稱);添加非空約束語法:altertable表名modify(字段名稱notnull); 域完整性約束(列約束)->達到數(shù)據(jù)的準確性,控制數(shù)據(jù)的大小或范圍或格式技術實施:check檢查約束altertable表名addconstraint約束名稱check(條件);達到數(shù)據(jù)的一致性)->表間約束(引用完整性約束技術實施:外鍵約束添加外鍵約束altertable夕卜鍵表addconstraint約束名稱foreignkey(外鍵字段)references

19、主鍵表(主鍵字段);刪除外鍵約束語法:altertable表名dropconstraint約束名稱;刪除匿名約束語法:altertable表名modify(字段名稱null);白定義完整性約束->以上三種數(shù)據(jù)庫內置約束不能滿足開發(fā)人員的需求是,需要開發(fā)人員白定一些約束條件技術實施:觸發(fā)器使用sql腳本批量插入數(shù)據(jù)使用命令SQL>路徑+文件名稱SQL>f:/a.sql;序列定義:Oracle中使用sequence來實現(xiàn)字段的白增長功能,和SQLServer中的identity屬性類型語法:createsequence序列名稱startwith起始數(shù)字incrementby增長量

20、;用法:序列對象通過兩個重要的屬性進行訪問取值下一個值.nextval->nextvalue->例子:selectseq_1.nextvalfromdual;.currval->currentvalue->當前值例子:selectseq_1.currvalfromdual;如何實現(xiàn)其白增長功能通過語法結構將序列對象與對應的數(shù)據(jù)表進行綁定,實現(xiàn)其白增長功能。例子:createtableusers(useridnumber(2),usernamevarchar2(10);createsequenceseq_usersstartwith1incrementby1;insert

21、intousersvalues(seq_users.nextval,'alvin');注意:Oracle建議一個序列對象盡與一張數(shù)據(jù)表進行綁定技巧:createsequence序列名稱;默認從1每次增長1視圖作用:1、簡化復雜的SQ薛句2、提高數(shù)據(jù)的訪問安全性語法:createorreplaceview視圖名稱as復雜的SQL查詢語句視圖是一張?zhí)摂M的數(shù)據(jù)表,在Table對象中不存在,只存在于內存中注意:若視圖由1張基表組成,修改視圖將會修改基表數(shù)據(jù),若視圖由多張表組成,則不會修改基表數(shù)據(jù)同義詞作用:Oracle中的同義詞提供各種數(shù)據(jù)庫對象(表)的別名,目的在于提高數(shù)據(jù)表訪問的安

22、全性,尤其多用戶并發(fā)訪問時。語法:createsynonym表的另U名for表名;SQL>createsynonymbaklforemp;擴展:公有同義詞public語法:createpublicsynonym另U名for表名;(1。)索引作用:提高SQL查詢語句按照制定字段查詢的效率語法:createindex索引的名稱on數(shù)據(jù)表(字段)例子:為hiredate字段添加索引,提高按日期查詢的SQL語句的效率createindexidx_hireonemp(hiredate)原理:空間換效率SQL語句索引優(yōu)化規(guī)則 不帶where條件的SQL語句一定不能使用索引 在where條件中有索引的

23、字段不能使用函數(shù)例子:假設我們查詢在1987年參加工作的所有員工SQL>select*fromempwhereto_char(hiredate,'yyyy')='1987'SQL>select*fromempwherehiredate=to_date('1987','yyyy'); 在where條件中有索引的字段不能參與運算天以前參加工作的員工信息10000例子:查詢在SQL>select*fromempwheresysdate-hiredate>10000;SQL>select*fromempwhe

24、rehiredate<sysdate-10000; 盡量少用notin,notexists,like'%'等關鍵字 書寫查詢語句的時候,應該首先考慮關聯(lián)查詢、其次考慮集合查詢,最后考慮子查詢 where條件中限制性強的條件應該寫在where最后的一個條件where條件從右向左經行條件解析 多表查詢中,驅動表應該是返回數(shù)據(jù)少的表例子:查詢部門account的所有員工信息SQL>selecte.*,d.dnamefromempe,deptdwheree.deptno=d.deptnoandd.dname='ACCOUNTING'(11)Oracle中常用

25、的數(shù)據(jù)字典Oracle是以中以表管表的模式,同時數(shù)據(jù)字典是有表或視圖組成。數(shù)據(jù)字典的分類:USER_xxx:表示當前用戶所擁有的數(shù)據(jù)庫對象ALL_xxxx:表示當前用戶與權力查看的數(shù)據(jù)庫對象DBA_xxxx:表示數(shù)據(jù)中所擁有的全部對象,只有在超級管理員級別下才可查看。xxxx:代表數(shù)據(jù)庫對象的復數(shù)形式,例如:tablesindexes5、Oracle數(shù)據(jù)庫的多表查詢等連接:selectemp.ename,dept.dnamefromemp,deptwhereemp.deptno=dept.deptno;使用內連接模式編寫:內連接:innerjoinonselectemp.ename,dept.

26、dnamefromempinnerjoindeptonemp.deptno=dept.deptno;分析:部門為主顯示字段,dept為主表姓名為輔助顯示字段,emp為輔助表夕卜連接:selectd.dname,e.enamefromempe,deptdwheree.deptno(+)=d.deptno;6、Oracle數(shù)據(jù)庫的游標游標cursor游標的分類:隱式游標:Oracle白動應以一個隱式游標名稱為SQL,該游標不被程序員控制,白動開啟、操作及結束。顯式游標:可供程序員白己創(chuàng)建及操作|-靜態(tài)游標靜態(tài)游標loop循環(huán)游標/for循環(huán)游標=loop循環(huán)游標=步驟1:創(chuàng)建一個游標cursor游

27、標名稱isSQL查詢語句;步驟2:開啟游標open游標名稱;->執(zhí)行定義的SQL查詢語句并將結果集合存放到游標中步驟3:使用loop循環(huán)遍歷游標中的數(shù)據(jù)并進行相應處理loopfetch游標名稱into變量;exitwhen游標名稱notfound;endloop;步驟4:關閉游標close游標名稱;例子:顯示部門編號為10的員工姓名declare-步驟1:創(chuàng)建一個游標cursormycurisselectenamefromempwheredeptno=10;enemp.ename%type;begin-步驟2:開啟游標openmycur;-步驟3:使用loop循環(huán)遍歷游標中的數(shù)據(jù)并進行相

28、應處理loopfetchmycurintoen;exitwhenmycur%notfound;dbms_output.put_line(en);endloop;-步驟4:關閉游標closemycur;end;=for循環(huán)游標=declare-步驟1:創(chuàng)建一個游標cursormycurisselect*fromempwheredeptno=10;erowemp%rowtype;begin-步驟3:使用for循環(huán)遍歷游標中的數(shù)據(jù)并進行相應處理forerowinmycurloopdbms_output.put_line(erow.ename);endloop;end;動態(tài)游標(擴展)作用:使用游標變

29、量高度重用(只能使用loop循環(huán))語法結構:步驟1:聲明一個動態(tài)游標類型type類型名稱isrefcursor;步驟2:使用聲明號的類型創(chuàng)建一個游標變量游標名稱類型名稱;步驟3:打開游標并且綁定SQL語句open游標名稱forSQL查詢語句步驟4:使用循環(huán)遍歷游標中的數(shù)據(jù)并進行處理loopfetch游標名稱into變量;exitwhen游標名稱%notfound.數(shù)據(jù)處理.endloop;34:重復5步驟步驟6:關閉游標close游標名稱;例子:顯示部門30的員工姓名及dept表中全部部門名稱declare-聲明一個游標類型typecurisrefcursor;-聲明游標變量mycurcur;

30、-聲明變量erowemp%rowtype;drowdept%rowtype;begin-打開游標openmycurforselect*fromempwheredeptno=30;loopfetchmycurintoerow;exitwhenmycur%notfound;dbms_output.put_line(erow.ename);endloop;dbms_output.put_line('=');-打開游標openmycurforselect*fromdept;loopfetchmycurintodrow;exitwhenmycur%notfound;dbms_output

31、.put_line(drow.dname);endloop;-關閉游標closemycur;end;游標所有屬性游標名稱!性名稱屬性名稱含義notfound當游標中沒有遍歷的數(shù)據(jù)時返回1found當游標中存在有遍歷的數(shù)據(jù)時返回isopen當游標開啟狀態(tài)時返回1rowcount返回游標影響行數(shù)7、Oracle數(shù)據(jù)的PL/SQL(1)PL/SQL塊語法格式:declare聲明.變量聲明區(qū)begin程序開始執(zhí)行語句區(qū).exception異常處理部分end;程序結束;變量的聲明標量標識符,不區(qū)分大小寫,先聲明再使用變量聲明的語法結構:標量名稱類型;例子:declareenonumber(4);edat

32、edate;beginend; 屬性引用類型|-字段引用類型例子:declareenoemp.ename%type;|-行引用類型例子:declareerowemp%rowtype; 變量的賦值四種方式:聲明時賦值賦值運算符“:=”例子:聲明一個變量賦值為2declarenumlnumber(2):=2;beginend;執(zhí)行區(qū)賦值例子:聲明一個變量賦值為2declarenum1number(2);beginnum1:=2;end;對話框賦值->程序與用戶之間進行數(shù)據(jù)交互例子:聲明一個變量賦值為2declarenumlnumber(2);beginnum1:=&請輸入數(shù)字;end

33、;注意點:當輸入字符串類型數(shù)據(jù)的使用書寫格式為:name:='&姓名';當輸入數(shù)字類型數(shù)據(jù)的使用書寫格式為:age:=&年齡;o.賦值模式例子:將emp表中simth的工資復制到變量esal中declareesalemp.sal%type;beginselectsalintoesalfromempwhereename='SMITH' end;Oracle的PL/SQL中屏幕輸出語句將信息輸出并換行語法:dbms_output.put_line('xxxxxxx');dbms_output.put('xx

34、xxxxx');輸出不換行注意:Oracle默認關閉屏幕輸出功能,需要開發(fā)人員輸入指令將其功能開啟SQL>setserveroutputon;中的異常處理PL/SQLD.語法:exceptionwhen異常名稱then.處理方式.異常:others->任何異常都可捕獲執(zhí)行語句部分 循環(huán)的使用:forwhileloopfor語法結構:for循環(huán)變量in起始數(shù)字.結束數(shù)字loop.循環(huán)體.endloop;例子1:顯示數(shù)字101(reverse)declareinumber;beginforiinreverse1.10loopdbms_output.put_line(i);end

35、loop;end;例子1:顯示乘法口訣declarei number;jnumber;begin-外層循環(huán)控制行數(shù)foriin1.9loop-內層循環(huán)控制個數(shù)forjin1.iloopdbms_output.put(j|'*'|i|'='|i*j|'');endloop;-換行dbms_output.put_line('');endloop;end; while循環(huán)語法:while進入條件loop.循環(huán)體.endloop;loop循環(huán)loop語法:exitwhen推出條件;.循環(huán)體.endloop;條件判斷語法:if條件thene

36、lsif條件thenelseendif;例子:模擬一個登錄結構,用戶名為admin密碼為chinasoftdeclareusernamevarchar2(10);passwordvarchar2(10);begin-用戶輸入賬號及密碼username:='&賬號'password:='&密碼'-邏輯判斷ifusername='admin'andpassword='chinasoft'thendbms_output.put_line('歡迎登錄:'|username);elsedbms_output.

37、put_line('賬號或密碼錯誤!');endif;end;處理白定義異常例子:若用戶輸入的數(shù)字不再110之內則拋出異常步驟1:創(chuàng)建一個異常對象在變量聲明區(qū)輸入一下代碼expexception;-聲明一個異常對象,名稱為exp步驟2:編寫條件判斷結構拋出異常在語句執(zhí)行區(qū)編寫一下代碼ifthenraise異常對象名稱;-拋出異常endif;步驟3:異常捕獲在語句執(zhí)行區(qū)編寫exceptionwhen異常對象名稱then處理方式declarennumber;-用來接收用戶輸入的數(shù)字expexception;-創(chuàng)建一個異常對象beginn:=&數(shù)字;-判斷ifn<1or

38、n>10thenraiseexp;-拋出異常endif;dbms_output.put_line(n);exceptionwhenexpthendbms_output.put_line('數(shù)字范圍不再110之內');end;8、Oracle數(shù)據(jù)庫中的存儲過程、函數(shù)、數(shù)據(jù)包Oracle中的存儲過程Oracle中的PL/SQL語句塊,沒有名字,成為匿名的PL/SQL塊,代碼重用性低。需要為PL/SQL塊起名字,起名后的PL/SQL塊統(tǒng)稱為子程序。 子程序的分類:存儲過程、白定義函數(shù)存儲過程存儲過程名稱createorreplaceprocedure語法:asPL/SQL塊如何

39、調用存儲過程兩種方式:1、指令方式->exec存儲過程名稱;、使用PL/SQL調用begin存儲過程名稱;end;帶參數(shù)的存儲過程兩大類:a)帶輸入?yún)?shù)b)帶輸出參數(shù)a)帶輸入?yún)?shù)的存儲過程語法:createorreplaceprocedure存儲過程名稱(參數(shù)名稱1in類型,.,參數(shù)名稱n類型)asPL/SQL塊b)帶輸出參數(shù)的存儲過程語法:createorreplaceprocedure存儲過程名稱(參數(shù)名稱1out類型,.,參數(shù)名稱nout類型)as塊PL/SQL.例子:顯示部門10的平均工資(使用輸出參數(shù))createorreplaceprocedurepro_demo3(avg

40、saloutemp.sal%type)asbeginselectavg(sal)intoavgsalfromempwheredeptno=10;end;調用:只能使用PL/SQL塊declaregetsalemp.sal%type;beginpro_demo3(getsal);dbms_output.put_line(getsal);end;/1、輸入指定員工的員工編號,輸出其所在部門的其他姓名(存儲過程、帶參數(shù)的游標、輸入?yún)?shù))思路:*1、使用SQL語句查詢7788員工所在部門的其他員工信息select*fromempwheredeptno=(selectdeptnofromempwhere

41、empno=7788)andempno<>7788;*2、修改成PL/SQL塊declarecursormycur(enoemp.empno%type)isselect*fromempwheredeptno=(selectdeptnofromempwhereempno=eno)andempno<>eno;erowemp%rowtype;tmpemp.empno%type;begintmp:=&工號;forerowinmycur(tmp)loopdbms_output.put_line(erow.ename);endloop;end;3 、修改成為存儲過程crea

42、teorreplaceprocedurepro_demo4(tmpemp.empno%type)ascursormycur(enoemp.empno%type)isselect*fromempwheredeptno=(selectdeptnofromempwhereempno=eno)andempno<>eno;erowemp%rowtype;beginforerowinmycur(tmp)loopdbms_output.put_line(erow.ename);endloop;end;*4、調用execpro_demo4(7788);/2、輸出制定員工所在部門的平均工資(存儲過程

43、、輸入?yún)?shù)、輸出參數(shù))思路:*1、編寫SQL語句selectavg(sal)fromempwheredeptno=(selectdeptnofromempwhereempno=7788)* 2、PL/SQL語句declareenoemp.empno%type;esalemp.sal%type;begineno:=&編號;selectavg(sal)intoesalfromempwheredeptno=(selectdeptnofromempwhereempno=eno);dbms_output.put_line(esal);end;* 3、修改為存儲過程createorreplacep

44、rocedurepro_demo5(enoinemp.empno%type,esaloutemp.sal%type)asbeginselectavg(sal)intoesalfromempwheredeptno=(selectdeptnofromempwhereempno=eno);end;*4、調用declaretmpemp.sal%type;beginpro_demo5(7788,tmp);dbms_output.put_line(tmp);end;程序包程序包是一個函數(shù)或存儲過程的集合。程序包的結構:第一部分:程序包的聲明createorreplacepackage包名稱as存儲過程的聲

45、明;白定義函數(shù)的聲明;end;第二部分:程序包主體createorreplacepackagebody包名稱as存儲過程的實現(xiàn);白定義函數(shù)的實現(xiàn);例子:完成對EM軟進行增刪改的操作parti:createorreplacepackageemp_packprocedureadd_emp(enoemp.empno%type,enmemp.ename%type,dnoemp.deptno%type);procedureupdate_emp(enoemp.empno%type,esalemp.sal%type);proceduredelete_emp(enoemp.empno%type);end;part2:createorreplacepackagebodyemp_packas-添加procedureadd_emp(enoemp.empno%type,enmemp.ename%type,dnoemp.deptno%t

溫馨提示

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

評論

0/150

提交評論