ORACLE深入淺出中級篇_第1頁
ORACLE深入淺出中級篇_第2頁
ORACLE深入淺出中級篇_第3頁
ORACLE深入淺出中級篇_第4頁
ORACLE深入淺出中級篇_第5頁
已閱讀5頁,還剩88頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

ORACL深入淺出主講人:鄒振興1第一章事務與鎖什么是事務?如何Oracle使用事務。在Java中使用事務。什么是鎖?演示更新丟失的問題。鎖的分類。阻塞與死鎖。2什么是事務什么是事務?事務是一種機制,這種機制能保證在事務內的DML(數(shù)據(jù)操作語句)做為一個不可分割的單元進行執(zhí)行。舉例說明事務。演示sqlservert2005事務處理。演示Oracle事務處理。事務四大特性(ACID)原子性(A)一致性(C)隔離性(I)永久性(D)3什么是事務事務處理的兩種方式顯示事務:用戶通過編碼方式開啟事務隱式事務:數(shù)據(jù)庫默認認為所有操作都是事務比較sqlserver2005與Oracle事務處理方式的區(qū)別。4如何Oracle使用事務Oracel事務關鍵字Savepointa;設置事務保存點Rollbacktoa;回滾到事務保存點a,事務不結束Commit;提交事務,事務結束Rollback;回滾所有事務,事務結束講解Oracel程序員一天5在JavaJdbc中使用事務演示如何在JavaJdbc中如何使用事務驅動包位置:oracle安裝路徑->oracle->jdbc->lib->classes12.jar演示案例:DBUtil.java6什么是鎖生活中的鎖:為什么會有鎖的出現(xiàn)。鎖的作用就是保護私有的空間。Oracle中的鎖:演示Oracle中更新丟失的問題。講解此問題的兩種思路:一、在第一個用戶修改之前不允許其它用戶修改。二、在修改之前,查看此數(shù)據(jù)的版本號。7鎖的分類悲觀鎖定此鎖持悲觀態(tài)度,認為在用戶修改數(shù)據(jù)期間,一定會有用戶再對其修改。那么此鎖會在用戶事務內一直保持鎖定狀態(tài),其它用戶無法進行修改。在查詢語句后接forupdatenowait此可加鎖。查詢多少數(shù)據(jù),鎖定多少數(shù)據(jù)。樂觀鎖定此鎖持樂觀態(tài)度,認為在用戶修改數(shù)據(jù)期間,其它用戶不會再對其修改,直到最后提交數(shù)據(jù)時才判斷數(shù)據(jù)是否已更改。8鎖的分類樂觀鎖定的實現(xiàn)方式:增加標識列來區(qū)分是否已修改通過OracleORA_ROWSCN機制來實現(xiàn)樂觀鎖定9阻塞與死鎖如果你有兩個會話,每個會話都持有另一個會話想要的資源,此時就會出現(xiàn)死鎖(deadlock)。例如,如果我的數(shù)據(jù)庫中有兩個表A和B,每個表中都只有一行,就可以很容易地展示什么是死鎖。我要做的只是打開兩個會話(例如,兩個SQL*Plus會話)。在會話A中更新表A,并在會話B中更新表B。現(xiàn)在,如果我想在會話B中更新表A,就會阻塞。會話A已經(jīng)鎖定了這一行。這不是死鎖;只是阻塞而已。我還沒有遇到過死鎖,因為會話A還有機會提交或回滾,這樣會話B就能繼續(xù)。10阻塞與死死鎖如果我再再回到會會話A,,試圖更更新表B,這就就會導致致一個死死鎖。要要在這兩兩個會話話中選擇擇一個作作為“犧犧牲品””,讓它它的語句句回滾。。例如,,會話B中對對表A的的更新新可能回回滾,得得到以下下錯誤::想要更更新表B的會會話A還還阻塞塞著,Oracle不不會回回滾整個個事務。。只會回回滾與死死鎖有關關的某條條語句。。會話B仍然然鎖定著著表B中中的行行,而會會話A還還在耐耐心地等等待這一一行可用用。收到到死鎖消消息后,,會話B必須須決定將將表B上上未執(zhí)執(zhí)行的工工作提交交還是回回滾,或或者繼續(xù)續(xù)走另一一條路,,以后再再提交。。一旦這這個會話話執(zhí)行提提交或回回滾,另另一個阻阻塞的會會話就會會繼續(xù),,好像什什么也沒沒有發(fā)生生過一樣樣。11總結開發(fā)多用用戶、數(shù)數(shù)據(jù)庫驅驅動的應應用時,,最大的的難點之之一是::一方面面要力爭爭取得最最大限度度的并發(fā)發(fā)訪問,,與此同同時還要要確保每每個用戶戶能以一一致的方方式讀取取和修改改數(shù)據(jù)。。為此就就有了鎖鎖定(locking)機制制,這也也是所有有數(shù)據(jù)庫庫都具有有的一個個關鍵特特性,Oracle在在這方方面更是是技高一一籌。不不過,Oracle的的這些些特性的的實現(xiàn)是是Oracle所特有有的,就就像SQLServer的的實現(xiàn)現(xiàn)只是SQLServer特有有的一樣樣,應用用執(zhí)行數(shù)數(shù)據(jù)處理理時,要要正確地地使用這這些機制制,而這這一點要要由你((應用的的開發(fā)人人員)來來保證。。12第五章使使用PL/SQLPL/SQL簡簡介變量、常常量數(shù)據(jù)類型型流程控制制異常處理理13PL/SQL簡簡介PL/SQL是是Oracle在sql標準準上的加加強,使使用Oracle能夠夠基于對對象編程程T-SQL是基基于事務務的結構構化查詢詢語言兩者都是是對SQL的擴擴展14PL/SQL塊塊簡介PL/SQL塊塊是構構成PL/SQL程程序的的基本組組織單元元,可以以編寫存存儲過程程、函數(shù)數(shù)、包、、觸發(fā)器器等。PL/SQL分分為三三個部分分:聲明明部分、、可執(zhí)行行部分和和異常處處理部分分15PL/SQL塊塊簡介演示:PL/SQL打印HelloWorld。演示:如何在在PL/SQL塊中向向表中增增加一條條記錄。。演示:如何在在PL/SQL塊中修修改表中中數(shù)據(jù)。。演示:查詢學學員'張張秋麗'的年齡齡。16PL/SQL塊塊小結結每一個PL/SQL塊塊將會自自動開啟啟一個事事務,在在PL/SQL塊中必必須結束束事務,,否則,,將會阻阻塞。PL/SQL塊塊每條語語句后,,必須帶帶上’;’,表表示語句句結束。。PL/SQL塊塊中不能能執(zhí)行select語語句進行行顯示。。在命令行行中執(zhí)行行pl-sql塊需加加/。在命令行行中打印印變量需需setserverouton;17變量與常常量在PL/SQL塊的聲聲明部分分聲明變變量或常常量語法法::declaresalnumber;piconstantnumber:=3.14;賦值值1、、使使用用賦賦值值運運算算符符““:=””2、使用SELECTINTO語句3、接收用戶戶輸入18變量與常量示示例Declaremynamevarchar2(20)notnull:=‘張三’;myagenumber;mypiconstantnumber:=3.14;Beginmyage:=26;selectenameintomynamefromempwhereempno=7369;--輸出End;19日期時間日期時間類型型存儲日期和時時間數(shù)據(jù)常用的兩種日日期時間類型型DATETIMESTAMPdeclaremydatedate;mytimetimestamp;beginselectsysdateintomydatefromdual;selectsysdateintomytimefromdual;dbms_output.put_line(mydate);dbms_output.put_line(mytime);end;20布爾類型(boolean)用于存儲邏輯輯值(TRUE、FALSE和NULL)不能向數(shù)據(jù)庫庫中插入BOOLEAN數(shù)據(jù)不能將列值保保存到BOOLEAN變變量中只能對BOOLEAN變變量執(zhí)行邏輯輯操作21屬性類型用于引用數(shù)據(jù)據(jù)庫列的數(shù)據(jù)據(jù)類型,以及及表示表中一一行的記錄類類型列類型%type,語法法:表名.列名%type行類型%rowtype,語法:表表名%rowtype優(yōu)點不需要知道被被引用的表列列的具體類型型如果被引用對對象的數(shù)據(jù)類類型發(fā)生改變變,PL/SQL變量量的數(shù)據(jù)類型型也隨之改變變22屬性類型示例例問題1:假設設現(xiàn)在不知道道emp表Job列的類類型,但要保保存員工7369的崗位位到變量中,,如何定義??declaremyjobemp.Job%type;beginselectJobintomyjobfromempwhereempno=7369;dbms_output.put_line(myjob);end;23屬性類型示例例問題2:假設設要輸出emp表員工7369的所所有信息,怎怎么辦?定義義8個列類型型變量,依次次輸出?declaremyempemp%rowtype;beginselect*intomyempfromempwhereempno=7369;dbms_output.put_line(myemp.ename||myemp.job);end;24異常處處理在運行行程序序時出出現(xiàn)的的錯誤誤叫做做異常常發(fā)生異異常后后,語語句將將停止止執(zhí)行行,控控制權權轉移移到PL/SQL塊塊的異異常處處理部部分異常有有兩種種類型型:預定義義異常常-當當PL/SQL程程序違違反Oracle規(guī)規(guī)則或或超越越系統(tǒng)統(tǒng)限制制時隱隱式引引發(fā)用戶定定義異異常-用用戶戶可以以在PL/SQL塊塊的聲聲明部部分定定義異異常,,自定定義的的異常常通過過RAISE語語句顯顯式引引發(fā)25預定義義異常常Others處處理理所有有異常常在用戶戶試圖圖將重重復的的值存存儲在在使用用唯一一索引引的數(shù)數(shù)據(jù)庫庫列中中時出出現(xiàn)DUP_VAL_ON_INDEX在將字字符串串轉換換為數(shù)數(shù)字時時出現(xiàn)現(xiàn)INVALID_NUMBER在表中中不存存在請請求的的行時時出現(xiàn)現(xiàn)NO_DATA_FOUND在執(zhí)行SELECTINTO語句句后返回回多行時時出現(xiàn)TOO_MANY_ROWS在以零作作為除數(shù)數(shù)時出現(xiàn)現(xiàn)ZERO_DIVIDE26預定義異異常declaremynameemp.ename%type;beginselectenameintomynamefromemp;Exceptionwhentoo_many_rowsthendbms_output.put_line('值過多多');end;27預定義異常常declaremynameemp.ename%type;beginselectenameintomynamefromempwhereempno=1;Exceptionwhenno_data_foundthendbms_output.put_line('沒有數(shù)數(shù)據(jù)');end;28用戶自定義義異常declaremyExceptionException;beginif...thenraisemyException;endif;ExceptionwhenmyExceptionthen...end;29流程控制條件結構If語句Case語語句循環(huán)結構Loop循循環(huán)While循環(huán)For循環(huán)環(huán)30條件結構1)if...then...endif;2)if...then...elseif...endif…….endif;嵌嵌套if3)if...then...elsif...then...else...endif;多多重if4)case...when...endcase;編寫一一個PL/SQL塊塊,用用戶輸輸入一一個員員工名名,如如果該該員工工的工工資低低于2000,,則將將該員員工工工資增增長10%。31接收用用戶輸輸入的的兩個個數(shù),,通過過條件件結構構判斷斷兩個個數(shù)的的關系系declarenum1number;num2number;beginnum1:=‘‘&請請輸入入一個個數(shù)’’;num2:='&num2';--接接收用用戶輸輸入'&name'ifnum1<num2thendbms_output.put_line('小小于');elsifnum1>num2thendbms_output.put_line('大大于');elsedbms_output.put_line('等等于');endif;end;32declaregradevarchar2(10);begingrade:='&grade';casegradewhen'A'thendbms_output.put_line('優(yōu)優(yōu)秀');when'B'thendbms_output.put_line('良良好');when'C'thendbms_output.put_line('一一般');when'D'thendbms_output.put_line('差差');elsedbms_output.put_line('沒這這個');endcase;end;33循環(huán)結結構使用三三種循循環(huán)實實現(xiàn)輸輸出100次我我愛你你341)無無條件件(無無限))循環(huán)環(huán)--跳跳出循循環(huán)exit,exitwhen...declarecounternumber:=0;beginloopcounter:=counter+1;dbms_output.put_line(counter||':我我愛你你');--ifcounter=100then--exit;--退退出循循環(huán)--endif;exitwhencounter=100;endloop;end;352)有有條件件循環(huán)環(huán)declarecounternumber:=0;beginwhile(counter<100)loopcounter:=counter+1;dbms_output.put_line(counter||':我我愛你你');endloop;end;363)循循環(huán)固固定次次數(shù):數(shù)字字區(qū)間間:下下限..上上限beginfornumin1..100loopdbms_output.put_line(num||':我我愛你你');endloop;end;37動態(tài)SQL應用::1、DDL語語句命命令和和會話話控制制語句句不能能在PL/SQL中中直接接使用用,但但是可可以通通過動動態(tài)SQL來來執(zhí)執(zhí)行2、在在運行行時,,根據(jù)據(jù)需要要動態(tài)態(tài)構建建SQL語語句執(zhí)執(zhí)行38動態(tài)SQL動態(tài)SQL是是指指在PL/SQL程程序執(zhí)執(zhí)行時時生成成的SQL語語句句編譯程程序對對動態(tài)態(tài)SQL不不做處處理,,而是是在程程序運運行時時動態(tài)態(tài)構造造語句句、對對語句句進行行語法法分析析并執(zhí)執(zhí)行執(zhí)行語語法::executeimmediate'sql語語句'[into變變量列列表]--將查查詢的的值賦賦值給給變量量[using參參數(shù)數(shù)列表表]--使使用參參數(shù)填填補占占位符符(:name)39Eg::利用用動態(tài)態(tài)SQL建建表beginexecuteimmediate'createtabletest(tidnumber)';end;問題:能能否建表表后執(zhí)行行插入數(shù)數(shù)據(jù)操作作?40Eg:根根據(jù)員工工編號獲獲得員工工姓名declaremynameemp.ename%type;beginexecuteimmediate'selectenamefromempwhereempno=:no'intomynameusing'&no';dbms_output.put_line(myname);end;問題:如如果Sql語句句有多個個條件怎怎么寫??41總結1、:=賦值運運算符2、||連接操操作符3、'&name'接接受用戶戶輸入?yún)?shù)值4、:name動態(tài)態(tài)SQL中占位位符,使使用using填補42第六章游游標管管理什么是游游標顯示游標標的使用用游標類型型的使用用隱式游標標的使用用43什么是游游標提問:請請編寫pl-sql塊塊,打印印出所有有的參加加考試的的學員信信息。分析問題題:pl-sql塊中中無法使使用select語句句,使用用變量也也無法保保存多行行數(shù)據(jù)。。解決問題題:要是是Oracle提供類類似于Java集合的的結構就就能輕松松解決問問題。44顯示游標標1顯式游標標在PL/SQL塊塊的聲聲明部分分定義查查詢,該該查詢可可以返回多行行顯式游標標的操作作過程::數(shù)據(jù)庫打開游標標30George344Roger245James1Stud_mrksStud_namestud_no提取行變量關閉游標標45顯示游標標2定義:CURSOR<游標標名>IS<SELECT語語句>[FORUPDATE|FORUPDATEOF字字段];操作:OPEN<游游標名>;--打開開游標FETCH<游標名名>INTO變量量1,變變量2,變量3,....變變量n;或或者FETCH<游標名名>INTO行對對象;--取出出游標當當前位置置的值CLOSE<游標名名>;--關關閉游標標46顯示游標標屬性%NOTFOUND--如如果FETCH語句失失敗,則則該屬性性為"TRUE",否否則為"FALSE";%FOUND--如如果FETCH語句成成功,則則該屬性性為"TRUE",否否則為"FALSE";%ROWCOUNT--返返回游標標當前的的行數(shù);%ISOPEN--如果游游標是開開的則返返回"TRUE",否否則為"FALSE";47輸出所有有員工編編號與姓姓名declarerowempemp%rowtype;--行行變量cursorempcurisselect*fromemp;--定義義游標beginopenempcur;--打開開游標loopfetchempcurintorowemp;dbms_output.put_line(rowemp.empno||rowemp.ename);exitwhenempcur%notfound;endloop;closeempcur;--關關閉游標標end;48For循循環(huán)游標標循環(huán)游標標用于簡簡化游標標處理代代碼自動打開開游標,,提取記記錄,關關閉游標標當用戶需需要從游游標中提提取所有有記錄時時使用循環(huán)游標標的語法法如下::FOR<record_index>IN<cursor_name>LOOP<executablestatements>ENDLOOP;<record_index>是類類型為%rowtype的記記錄變量量使用游標標for循環(huán)的的時候不不能使用用open語句句,fetch語句和和close語語句,否則會產(chǎn)生生錯誤。49輸出所有員員工編號與與姓名declarecursorempcurisselect*fromemp;--定定義游標beginforrowempinempcurloopdbms_output.put_line(rowemp.empno||rowemp.ename);endloop;end;50帶參數(shù)的游游標提高游標的的靈活性語法:CURSOR<游游標名>(參數(shù)列表表)IS<SELECT語句>;51根據(jù)部門編編號輸出該該部門員工工姓名declarecursorempcur(dtnoemp.deptno%type)isselect*fromempwheredeptno=dtno;--定義游游標beginforrowempinempcur(20)loopdbms_output.put_line(rowemp.ename);endloop;end;52游標加鎖[FORUPDATE|FORUPDATEOF字字段]即在程中有有“UPDATE””,“INSERT”,“DELETE”語句句對數(shù)據(jù)庫庫操作時,,游標自動動給指定的的表或者字字段加鎖,,防止同時時有別的程程序對指定定的表或字字段進行““UPDATE”,“INSERT””,“DELETE”操作。。在使用“DELETE”,““UPDATE”后后還可以在在程序中使使用CURRENTOF<游標名名>子句句引用當前前行進行更更新操作。53使用游標更更新工資,,翻倍declarecursormycursorisselectsalfromempforupdate;beginforrinmycursorloopupdateempsetsal=sal*2wherecurrentofmycursor;endloop;end;54REF游標標與游標變變量REF游游標和游標標變量用于于處理運行行時動態(tài)執(zhí)執(zhí)行的SQL查查詢創(chuàng)建游標變變量需要兩兩個步驟::聲明REF游標標類型聲明REF游標標類型的變變量用于聲明REF游游標類型型的語法為為:TYPE<ref_cursor_name>ISREFCURSOR[RETURN<return_type>];打開游標變變量的語法法如下:OPENcursor_nameFORselect_statement;55獲取部門10的工資資declareTypesalcursorisrefcursor;--聲明明游標類型型salcurvarsalcursor;--定義游游標變量mysalnumber;beginopensalcurvarforselectsalfrommyempwheredeptno=10;loopfetchsalcurvarintomysal;dbms_output.put_line(mysal);exitwhensalcurvar%notfound;endloop;end;56游標變量優(yōu)點點游標變量的功功能強大,可可以簡化數(shù)據(jù)據(jù)處理。游標變量的優(yōu)優(yōu)點有:可從不同的SELECT語句中中提取結果集集可以作為過程程的參數(shù)進行行傳遞可以引用游標標的所有屬性性可以進行賦值值運算57使用游標變量量執(zhí)行動態(tài)SqldeclareTypesalcursorisrefcursor;--聲明游標類類型salcurvarsalcursor;--定義游標標變量mysalnumber;beginopensalcurvarfor'selectsalfrommyempwheredeptno=:dno'--動態(tài)SQL字符串串using‘‘&no’’;--填補補占位符的參參數(shù)loopfetchsalcurvarintomysal;dbms_output.put_line(mysal);exitwhensalcurvar%notfound;endloop;end;58隱式游標在PL/SQL中使用DML語句時自動創(chuàng)建隱式式游標隱式游標自動動聲明、打開開和關閉,其其游標名稱為為SQL通過檢查隱式式游標的屬性性可以獲得最最近執(zhí)行的DML語句句的信息59隱式游游標屬屬性%NOTFOUND--如如果DML語句句沒有有影響響到任任何行行時,,則該該屬性性為"TRUE",,否則則為"FALSE";%FOUND--如果果DML語語句影影響到到一行行或多多行時時,則則該屬屬性為為"TRUE",否否則為為"FALSE";%ROWCOUNT--返返回DML語句句影響響的行行數(shù);%ISOPEN-游游標標是否否打開開,隱隱式游游標始始終為為FALSE使用::游標標名稱稱+屬屬性SQL%NOTFOUND60隱式游游標屬屬性beginupdateempsetcomm=100whereempno=7369;ifSQL%Found=truethendbms_output.put_line('更更新成成功');dbms_output.put_line('受受影響響的行行數(shù)'||SQl%rowcount);endif;IfSQL%NotFound=truethendbms_output.put_line(‘不不存在在');endif;end;61總結游標用用于處處理查查詢結結果集集中的的數(shù)據(jù)據(jù)游標類類型有有:隱隱式游游標、、顯式式游標標和REF游游標標隱式游游標由由PL/SQL自自動動定義義、打打開和和關閉閉顯式游游標用用于處處理返返回多多行的的查詢詢在聲明明REF游游標時時,不不需要要將SELECT語語句與與其其關聯(lián)聯(lián)62第七章章子子程序序與程程序包包什么是是子程程序子程序序一::存儲儲過程程子程序序二::函數(shù)數(shù)子程序序三::自主主事務務處理理組織子子程序序:程程序包包63子程序序1命名的的PL/SQL塊塊,,編譯譯并存存儲在在數(shù)據(jù)據(jù)庫中中。子程序序的各各個部部分::聲明部部分可執(zhí)行行部分分異常處處理部部分(可選選)子程序序的分分類::過程--執(zhí)執(zhí)行行某些些操作作函數(shù)--執(zhí)執(zhí)行行操作作并返返回值值64子程序序2子程序序的優(yōu)優(yōu)點::模塊化化將程序序分解解為邏邏輯模模塊可重用用性可以被被任意意數(shù)目目的程程序調調用可維護護性簡化維維護操操作安全性性通過設設置權權限,,使數(shù)數(shù)據(jù)更更安全全65子程序序一::存儲儲過程程過程是是用于于完成成特定定任務務的子子程序序例如:前往售票廳廳詢問關于車車票的信息息排隊等候在柜臺購買買車票66子程序一::存儲過程程創(chuàng)建簡單過過程createorreplaceprocedureSayHiasbegindbms_output.put_line('hi');end;67子程序一::存儲過程程調用--1、在在命令窗口口下executeSayHi;--2、在在SQLWindow下beginSayHi();end;68子程序一::存儲過程程帶參數(shù)過程程,參數(shù)不不用指定長長度createorreplaceprocedureSayHi(strvarchar2)asbegindbms_output.put_line(str);end;69子程序一::存儲過程程根據(jù)員工編編號查詢員員工姓名,,并打印,,沒找到數(shù)數(shù)據(jù)則異常常處理createorreplaceprocedureSearchName(emp_nonumber)isempnamevarchar(20);beginselectenameintoempnamefromempwhereempno=emp_no;dbms_output.put_line(empname);end;70子程序一:存存儲過程過程參數(shù)的三三種模式:IN用于接受調用用程序的值默認的參數(shù)模模式OUT用于向調用程程序返回值INOUT用于接受調用用程序的值,,并向調用程程序返回更新新的值71子程序一::存儲過程程根據(jù)員工編編號返回員員工姓名給給另一程序序createorreplaceprocedureSearchName(emp_noinnumber,empnameoutvarchar2)isbeginselectenameintoempnamefromempwhereempno=emp_no;end;72子程序一::存儲過程程declareemp_nonumber;empnamevarchar2(20);beginemp_no:='&no';SearchName(emp_no,empname);dbms_output.put_line(empname);end;73子程序一::存儲過程程交換兩個數(shù)數(shù)createorreplaceprocedureSwap(num1inoutnumber,num2inoutnumber)istempnumber;begintemp:=num1;num1:=num2;num2:=temp;end;74子程序一::存儲過程程declarenum1number:=10;num2number:=20;begindbms_output.put_line('num1='||num1);dbms_output.put_line('num2='||num2);Swap(num1,num2);dbms_output.put_line('調用過過程后');dbms_output.put_line('num1='||num1);dbms_output.put_line('num2='||num2);end;75子程序一::存儲過程程--返返回回游游標標的的存存儲儲過過程程createorreplaceproceduregetAllEmp(returnCursoroutsys_refcursor)asbeginopenreturnCursorforselect*fromemp;end;--使使用用存存儲儲過過程程返返回回的的游游標標declaretypeclasscursorisrefcursor;mycursorclasscursor;var_empemp%rowtype;begingetAllEmp(returnCursor=>mycursor);loopfetchmycursorintovar_emp;dbms_output.put_line(var_emp.ename);exitwhenmycursor%notfound;endloop;end;76子程程序序一一::存存儲儲過過程程創(chuàng)建建過過程程的的語語法法::create[orreplace]procedure過程程名名稱稱[(參參數(shù)數(shù)列列表表)]is|as[變變量量]begin可執(zhí)執(zhí)行行部部分分;[Exception]end;77子程程序序一一::存存儲儲過過程程使用用Java程程序序調調用用幾幾種種存存儲儲過過程程。。Test.java78子程程序序二二::函函數(shù)數(shù)(function)函數(shù)數(shù)是是可可以以返返回回值值的的命命名名的的PL/SQL子子程程序序。。參數(shù)數(shù)與與返返回回值值類類型型不不用用指指定定長長度度79子程程序序二二::函函數(shù)數(shù)簡單單函函數(shù)數(shù)createorreplacefunctionFSayHireturnvarchar2isbeginreturn'Hi';end;80子程序二二:函數(shù)數(shù)調用函數(shù)數(shù)1、結合合查詢selectFSayHifromdual;2、返回回值給變變量declarestrvarchar2(20);beginstr:=FSayHi;dbms_output.put_line(str);end;81子程序二二:函數(shù)數(shù)帶參函數(shù)數(shù)createorreplacefunctionFSayHi(strvarchar2)returnvarchar2isbeginreturnstr;end;selectFSayHi('大大家好')fromdual;82子程序二二:函數(shù)數(shù)--通過過員工編編號返回回員工姓姓名createorreplacefunctionFSearchName(emp_nonumber)returnvarchar2isempnamevarchar2(20);beginselectenameintoempnamefromempwhereempno=emp_no;returnempname;end;selectFSearchName(7369)fromdual;83子程序二二:函數(shù)數(shù)創(chuàng)建函數(shù)數(shù)語法create[orreplace]function函數(shù)名稱稱[(參參數(shù)列表表)]returnis|asbegin可執(zhí)行部部分;[Exception]end;84子程序二二:函數(shù)數(shù)刪除過程程與函數(shù)數(shù)dropprocedure過過程名;dropfunction函數(shù)數(shù)名;授予其他他用戶執(zhí)執(zhí)行子程程序的權權限grantexecuteon子程程序名to用用戶名名;85過程與函函數(shù)比較較過程函數(shù)作為PL/SQL語句執(zhí)行作為表達式的一部分調用在規(guī)格說明中不包含RETURN子句必須在規(guī)格說明中包含RETURN子句不返回任何值必須返回單個值可以包含RETURN語句,但是與函數(shù)不同,它不能用于返回值必須包含至少一條RETURN

語句86子程序三三:自主主事務處處理自主事務務處理主事務處處理啟動動獨立事事務處理理然后主事事務處理理被暫停停自主事務務處理子子程序內內的SQL操操作然后終止止自主事事務處理理恢復主事事務處理理PRAGMAAUTONOMOUS_TRANSACTION用用于標標記子程程序為自自主事務務處理87子程序三三:自主主事務處處理自主事務務處理測測試:創(chuàng)建過程1,執(zhí)行刪刪除員工7369操操作,并回回滾創(chuàng)建過程2,執(zhí)行刪刪除員工7499操操作,并調調用過程1創(chuàng)建程序調調用過程2問哪個刪除除操作會回回滾?88子程序三::自主事務務處理createorreplaceproceduretestp1is--pragmaautonomous_transaction;--標識子子程序為自自主事務處處理begindelete

溫馨提示

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

評論

0/150

提交評論