版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
生物信息學(xué)數(shù)據(jù)庫設(shè)計(jì)第六章MySQL存儲過程生物信息學(xué)數(shù)據(jù)庫設(shè)計(jì)第六章MySQL存儲過程存儲過程的概念所謂的存儲過程就是存儲在數(shù)據(jù)庫當(dāng)中的可以執(zhí)行特定工作(查詢和更新)的一組SQL代碼的程序段。
與自定義函數(shù)的區(qū)別:
自定義函數(shù)有且只有一個返回值,就像普通的函數(shù)一樣,可以直接在表達(dá)式中嵌入調(diào)用。
存儲過程可以沒有返回值,也可以有任意個輸出參數(shù),必須單獨(dú)調(diào)用。
存儲過程的概念所謂的存儲過程就是存儲在數(shù)據(jù)庫當(dāng)中的可執(zhí)行的本質(zhì)都一樣。只是函數(shù)有如只能返回一個變量的限制。而存儲過程可以返回多個。而函數(shù)是可以嵌入在sql中使用的,可以在select中調(diào)用,而存儲過程不行。函數(shù)限制比較多,比如不能用臨時表,只能用表變量。還有一些函數(shù)不可用等等。而存儲過程的限制相對就比較少。
執(zhí)行的本質(zhì)都一樣。只是函數(shù)有如只能返回一個變量的限制。而存儲一般來說,存儲過程實(shí)現(xiàn)的功能要復(fù)雜一點(diǎn),而函數(shù)的實(shí)現(xiàn)的功能針對性比較強(qiáng)。
對于存儲過程來說可以返回參數(shù),而函數(shù)只能返回值或者表對象。存儲過程一般是作為一個獨(dú)立的部分來執(zhí)行,而函數(shù)可以作為查詢語句的一個部分來調(diào)用,由于函數(shù)可以返回一個表對象,因此它可以在查詢語句中位于FROM關(guān)鍵字的后面。一般來說,存儲過程實(shí)現(xiàn)的功能要復(fù)雜一存儲過程的優(yōu)點(diǎn)存儲過程只在創(chuàng)造時進(jìn)行編譯,以后每次執(zhí)行存儲過程都不需再重新編譯,而一般SQL語句每執(zhí)行一次就編譯一次,所以使用存儲過程可提高數(shù)據(jù)庫執(zhí)行速度。
當(dāng)對數(shù)據(jù)庫進(jìn)行復(fù)雜操作時(如對多個表進(jìn)行Update、Insert、Query、Delete時),可將此復(fù)雜操作用存儲過程封裝起來與數(shù)據(jù)庫提供的事務(wù)處理結(jié)合一起使用。
存儲過程可以重復(fù)使用,可減少數(shù)據(jù)庫開發(fā)人員的工作量。
安全性高,可設(shè)定只有某此用戶才具有對指定存儲過程的使用權(quán)。存儲過程的優(yōu)點(diǎn)存儲過程只在創(chuàng)造時進(jìn)行編譯,以后每次執(zhí)行存儲過基本的創(chuàng)建、刪除語法CREATEPROCEDUREsp_name([proc_parameter[,...]])
[characteristic...]routine_body
默認(rèn)地,子程序與當(dāng)前數(shù)據(jù)庫關(guān)聯(lián)。要明確地把子程序與一個給定數(shù)據(jù)庫關(guān)聯(lián)起來,可以在創(chuàng)建子程序的時候指定其名字為db_name.sp_name。
sp_name存儲過程的名字proc_parameter指定參數(shù)為IN,OUT,或INOUTcharacteristic特征routine_body
包含合法的SQL過程語句。基本的創(chuàng)建、刪除語法CREATEPROCEDUREsp_in把數(shù)據(jù)從外部傳遞給存儲過程out從存儲過程內(nèi)部返回值給外部使用者inout把數(shù)據(jù)傳遞給存儲過程和將存儲過程的返回值傳遞給外部使用者in把數(shù)據(jù)從外部傳遞給存儲過程DROP{PROCEDURE|FUNCTION}[IFEXISTS]sp_name
這個語句被用來移除一個存儲程序或函數(shù)。即,從服務(wù)器移除一個制定的子程序。在MySQL5.1中,你必須有ALTERROUTINE權(quán)限才可用此子程序。這個權(quán)限被自動授予子程序的創(chuàng)建者。IFEXISTS子句是一個MySQL的擴(kuò)展。如果程序或函數(shù)不存在,它防止發(fā)生錯誤showprocedurestatus;查看存儲過程狀態(tài)MySQL存儲過程課件delimiter//DROPPROCEDUREIFEXISTSsp_test//CREATEPROCEDUREsp_test
/*存儲過程名*/(INinparmsINT,OUToutparamsvarchar(32))
/*輸入?yún)?shù)*/BEGIN/*語句塊頭*/DECLAREvarCHAR(10);/*變量聲明*/DECLAREnumint;IFinparms=1THEN/*IF條件開始*/SETvar='hello';/*賦值*/ELSESETvar='world';ENDIF;/*IF結(jié)束*/INSERTINTOt1VALUES(var);
/*SQL語句*/selectcount(*)fromt1intonum;SELECTnameFROMt1LIMITnum,1INTOoutparams;END//delimiter;
callsp_test(1,@out);Select@out;事先創(chuàng)建表createtablet1(idintnotnullauto_increment,namevarchar(45),primarykeypk_id(id));delimiter//存儲過程的變量聲明變量:DECLAREvar_name[,...]type[DEFAULTvalue]
這個語句被用來聲明局部變量。要給變量提供一個默認(rèn)值,需要包含一個DEFAULT子句。值可以被指定為一個表達(dá)式,不需要為一個常數(shù)。如果沒有DEFAULT子句,初始值為NULL。
局部變量的作用范圍在它被聲明的BEGIN...END塊內(nèi)。它可以被用在嵌套的塊中,除了那些用相同名字聲明變量的塊。存儲過程的變量聲明變量:變量賦值變量賦值,SET語句:SETvar_name=expr[,var_name=expr]...也可以用語句代替SET來為用戶變量分配一個值。在這種情況下,分配符必須為:=而不能用=,因?yàn)樵诜荢ET語句中=被視為一個比較操作符,如下所示:
mysql>SET@t1=0,@t2=0,@t3=0;
mysql>SELECT@t1:=0,@t2:=0,@t3:=0;
對于使用select語句為變量賦值的情況,若返回結(jié)果為空,即沒有記錄,此時變量的值為上一次變量賦值時的值,如果沒有對變量賦過值,則為NULL。變量賦值變量賦值,SET語句:變量賦值,SELECT...INTO語句SELECTcol_name[,...]INTOvar_name[,...]table_expr這個SELECT語法把選定的列直接存儲到變量。因此,只有單一的行可以被取回。SELECTid,dataINTOx,yFROMtest.t1LIMIT1;變量賦值,SELECT...INTO語句BEGIN...END復(fù)合語句
[begin_label:]BEGIN[statement_list]END[end_label]
存儲子程序可以使用BEGIN...END復(fù)合語句來包含多個語句。statement_list代表一個或多個語句的列表。statement_list之內(nèi)每個語句都必須用分號(;)來結(jié)尾。
復(fù)合語句可以被標(biāo)記。除非begin_label存在,否則end_label不能被給出,并且如果二者都存在,他們必須是同樣的。
使用多重語句需要客戶端能發(fā)送包含語句定界符;的查詢字符串。這個符號在命令行客戶端被用delimiter命令來處理。改變查詢結(jié)尾定界符;(比如改變?yōu)?/)使得;可被用在子程序體中。BEGIN...END復(fù)合語句[begin_label:]流程控制IF語句IFsearch_conditionTHENstatement_list
[ELSEIFsearch_conditionTHENstatement_list]...
[ELSEstatement_list]ENDIF
IF實(shí)現(xiàn)了一個基本的條件構(gòu)造。如果search_condition求值為真,相應(yīng)的SQL語句列表被執(zhí)行。如果沒有search_condition匹配,在ELSE子句里的語句列表被執(zhí)行。statement_list可以包括一個或多個語句。
流程控制IF語句舉例:DELIMITER//CREATEPROCEDUREp1(INparameter1INT)BEGINDECLAREvariable1INT;SETvariable1=parameter1+1;IFvariable1=0THENINSERTINTOtVALUES(17);ENDIF;IFparameter1=0THENUPDATEtSETs1=s1+1;ELSEUPDATEtSETs1=s1+2;ENDIF;END//DELIMITER;舉例:CASE語句CASEcase_value
WHENwhen_valueTHENstatement_list
[WHENwhen_valueTHENstatement_list]...
[ELSEstatement_list]ENDCASEOr:CASE
WHENsearch_conditionTHENstatement_list
[WHENsearch_conditionTHENstatement_list]...
[ELSEstatement_list]ENDCASECASE語句存儲程序的CASE語句實(shí)現(xiàn)一個復(fù)雜的條件構(gòu)造。如果search_condition求值為真,相應(yīng)的SQL被執(zhí)行。如果沒有搜索條件匹配,在ELSE子句里的語句被執(zhí)行。舉例:CREATEPROCEDUREp2(INparameter1INT)BEGINDECLAREvariable1INT;SETvariable1=parameter1+1;CASEvariable1WHEN0THENINSERTINTOtVALUES(17);WHEN1THENINSERTINTOtVALUES(18);ELSEINSERTINTOtVALUES(19);ENDCASE;END//存儲程序的CASE語句實(shí)現(xiàn)一個復(fù)雜的條件構(gòu)造。如果searc循環(huán)語句WHILE…ENDWHILE舉例:
CREATEPROCEDUREp4()BEGINDECLAREvINT;SETv=0;WHILEv<5DOINSERTINTOtVALUES(v);SETv=v+1;ENDWHILE;END//循環(huán)語句循環(huán)語句LOOP…ENDLOOP舉例:CREATEPROCEDUREp5()BEGINDECLAREvINT;SETv=0;loop_label:LOOPINSERTINTOtVALUES(v);SETv=v+1;IFv>=5THENLEAVEloop_label;ENDIF;ENDLOOP;END//[begin_label:]LOOP
statement_listENDLOOP[end_label]LOOP允許某特定語句或語句群的重復(fù)執(zhí)行,實(shí)現(xiàn)一個簡單的循環(huán)構(gòu)造。在循環(huán)內(nèi)的語句一直重復(fù)直到循環(huán)被退出,退出通常伴隨著一個LEAVE語句。循環(huán)語句補(bǔ)充:迭代(ITERATE)語句CREATEPROCEDUREp7()BEGINDECLAREvINT;SETv=0;loop_label:LOOPIFv=3THENSETv=v+1;ITERATEloop_label;ENDIF;INSERTINTOtVALUES(v);SETv=v+1;IFv>=5THENLEAVEloop_label;ENDIF;ENDLOOP;END//補(bǔ)充:迭代(ITERATE)語句注釋語法:mysql存儲過程可使用兩種風(fēng)格的注釋雙模杠:--,該風(fēng)格一般用于單行注釋c風(fēng)格:/*注釋內(nèi)容*/,一般用于多行注釋使用權(quán)限:
CREATEROUTINE建立存儲過程ALTERROUTINE編輯和刪除存儲過程EXECUTE執(zhí)行存儲過程注釋語法:條件和異常處理程序DECLAREhandler_typeHANDLERFORcondition_value[,...]sp_statement
handler_type:
CONTINUE
|EXIT
condition_value:
SQLSTATE[VALUE]sqlstate_value
|condition_name
|SQLWARNING
|NOTFOUND
|SQLEXCEPTION這個語句指定每個可以處理一個或多個條件的處理程序。如果產(chǎn)生一個或多個條件,指定的語句被執(zhí)行。對一個CONTINUE處理程序,當(dāng)前子程序的執(zhí)行在執(zhí)行處理程序語句之后繼續(xù)。對于EXIT處理程序,當(dāng)前BEGIN...END復(fù)合語句的執(zhí)行被終止。條件和異常處理程序DECLAREhandler_typeSQLWARNING是對所有以01開頭的SQLSTATE代碼的速記。NOTFOUND是對所有以02開頭的SQLSTATE代碼的速記。SQLEXCEPTION是對所有沒有被SQLWARNING或NOTFOUND捕獲的SQLSTATE代碼的速記。聲明自定義條件:DECLAREcondition_nameCONDITIONFORcondition_valuecondition_value:SQLSTATE[VALUE]sqlstate_valueSQLWARNING是對所有以01開頭的SQLSTATE代碼舉例:CREATETABLEt2(s1int,primarykey(s1));delimiter//CREATEPROCEDUREhandlerdemo()BEGINDECLARECONTINUEHANDLERFORSQLSTATE'23000'SET@x2=1;
SET@x=1;INSERTINTOt2VALUES(1);SET@x=2;INSERTINTOt2VALUES(1);SET@x=3;END//delimiter;舉例:游標(biāo)聲明游標(biāo)DECLAREcursor_nameCURSORFORselect_statement這個語句聲明一個光標(biāo)。也可以在子程序中定義多個光標(biāo),但是一個塊中的每一個光標(biāo)必須有唯一的名字。打開游標(biāo)OPENcursor_name這個語句打開先前聲明的光標(biāo)。游標(biāo)FETCHFETCHcursor_nameINTOvar_name[,var_name]...這個語句用指定的打開光標(biāo)讀取下一行(如果有下一行的話),并且前進(jìn)光標(biāo)指針。
游標(biāo)聲明游標(biāo)關(guān)閉游標(biāo)CLOSECLOSEcursor_name這個語句關(guān)閉先前打開的光標(biāo)。如果未被明確地關(guān)閉,光標(biāo)在它被聲明的復(fù)合語句的末尾被關(guān)閉。游標(biāo)的特性:READONLY只讀,只能取值而不能賦值;NOTSCROOLABLE不可回滾,只能順序讀取;ASENSITIVE敏感,不能在已經(jīng)打開游標(biāo)的表上執(zhí)行update事務(wù);關(guān)閉游標(biāo)CLOSE舉例:createtablestu_sumscore(namechar(16),sum_scoreint);delimiter//CREATEPROCEDUREsp_cur()BEGINDECLAREdoneINTDEFAULT0;DECLAREv_id,v_nameCHAR(16);DECLAREv_subjectid,v_scoreINT;DECLAREcur1CURSORFORSELECTdistinctidFROMstu_grade;DECLARECONTINUEHANDLERFORSQLSTATE'02000'SETdone=1;
OPENcur1;REPEATFETCHcur1INTOv_id;SELECTSUM(SCORE)INTOv_scorefromstu_gradewhereid=v_id;SELECTnameINTOv_namefromstud_infowhereid=v_id;IFNOTdoneTHENINSERTINTOstu_sumscoreVALUES(v_name,v_score);ENDIF;UNTILdoneENDREPEAT;CLOSEcur1;/*CLOSEcur2;*/END//delimiter;舉例:作業(yè)利用存儲過程,統(tǒng)計(jì)每門課程的總成績,空值默認(rèn)為0;利用存儲過程,統(tǒng)計(jì)每門課程上課人數(shù),考試平均成績。作業(yè)利用存儲過程,統(tǒng)計(jì)每門課程的總成績,空值默認(rèn)為0;潛龍勿用
見龍?jiān)谔?,利見大?/p>
29潛龍勿用
見龍?jiān)谔铮姶笕?9生物信息學(xué)數(shù)據(jù)庫設(shè)計(jì)第六章MySQL存儲過程生物信息學(xué)數(shù)據(jù)庫設(shè)計(jì)第六章MySQL存儲過程存儲過程的概念所謂的存儲過程就是存儲在數(shù)據(jù)庫當(dāng)中的可以執(zhí)行特定工作(查詢和更新)的一組SQL代碼的程序段。
與自定義函數(shù)的區(qū)別:
自定義函數(shù)有且只有一個返回值,就像普通的函數(shù)一樣,可以直接在表達(dá)式中嵌入調(diào)用。
存儲過程可以沒有返回值,也可以有任意個輸出參數(shù),必須單獨(dú)調(diào)用。
存儲過程的概念所謂的存儲過程就是存儲在數(shù)據(jù)庫當(dāng)中的可執(zhí)行的本質(zhì)都一樣。只是函數(shù)有如只能返回一個變量的限制。而存儲過程可以返回多個。而函數(shù)是可以嵌入在sql中使用的,可以在select中調(diào)用,而存儲過程不行。函數(shù)限制比較多,比如不能用臨時表,只能用表變量。還有一些函數(shù)不可用等等。而存儲過程的限制相對就比較少。
執(zhí)行的本質(zhì)都一樣。只是函數(shù)有如只能返回一個變量的限制。而存儲一般來說,存儲過程實(shí)現(xiàn)的功能要復(fù)雜一點(diǎn),而函數(shù)的實(shí)現(xiàn)的功能針對性比較強(qiáng)。
對于存儲過程來說可以返回參數(shù),而函數(shù)只能返回值或者表對象。存儲過程一般是作為一個獨(dú)立的部分來執(zhí)行,而函數(shù)可以作為查詢語句的一個部分來調(diào)用,由于函數(shù)可以返回一個表對象,因此它可以在查詢語句中位于FROM關(guān)鍵字的后面。一般來說,存儲過程實(shí)現(xiàn)的功能要復(fù)雜一存儲過程的優(yōu)點(diǎn)存儲過程只在創(chuàng)造時進(jìn)行編譯,以后每次執(zhí)行存儲過程都不需再重新編譯,而一般SQL語句每執(zhí)行一次就編譯一次,所以使用存儲過程可提高數(shù)據(jù)庫執(zhí)行速度。
當(dāng)對數(shù)據(jù)庫進(jìn)行復(fù)雜操作時(如對多個表進(jìn)行Update、Insert、Query、Delete時),可將此復(fù)雜操作用存儲過程封裝起來與數(shù)據(jù)庫提供的事務(wù)處理結(jié)合一起使用。
存儲過程可以重復(fù)使用,可減少數(shù)據(jù)庫開發(fā)人員的工作量。
安全性高,可設(shè)定只有某此用戶才具有對指定存儲過程的使用權(quán)。存儲過程的優(yōu)點(diǎn)存儲過程只在創(chuàng)造時進(jìn)行編譯,以后每次執(zhí)行存儲過基本的創(chuàng)建、刪除語法CREATEPROCEDUREsp_name([proc_parameter[,...]])
[characteristic...]routine_body
默認(rèn)地,子程序與當(dāng)前數(shù)據(jù)庫關(guān)聯(lián)。要明確地把子程序與一個給定數(shù)據(jù)庫關(guān)聯(lián)起來,可以在創(chuàng)建子程序的時候指定其名字為db_name.sp_name。
sp_name存儲過程的名字proc_parameter指定參數(shù)為IN,OUT,或INOUTcharacteristic特征routine_body
包含合法的SQL過程語句。基本的創(chuàng)建、刪除語法CREATEPROCEDUREsp_in把數(shù)據(jù)從外部傳遞給存儲過程out從存儲過程內(nèi)部返回值給外部使用者inout把數(shù)據(jù)傳遞給存儲過程和將存儲過程的返回值傳遞給外部使用者in把數(shù)據(jù)從外部傳遞給存儲過程DROP{PROCEDURE|FUNCTION}[IFEXISTS]sp_name
這個語句被用來移除一個存儲程序或函數(shù)。即,從服務(wù)器移除一個制定的子程序。在MySQL5.1中,你必須有ALTERROUTINE權(quán)限才可用此子程序。這個權(quán)限被自動授予子程序的創(chuàng)建者。IFEXISTS子句是一個MySQL的擴(kuò)展。如果程序或函數(shù)不存在,它防止發(fā)生錯誤showprocedurestatus;查看存儲過程狀態(tài)MySQL存儲過程課件delimiter//DROPPROCEDUREIFEXISTSsp_test//CREATEPROCEDUREsp_test
/*存儲過程名*/(INinparmsINT,OUToutparamsvarchar(32))
/*輸入?yún)?shù)*/BEGIN/*語句塊頭*/DECLAREvarCHAR(10);/*變量聲明*/DECLAREnumint;IFinparms=1THEN/*IF條件開始*/SETvar='hello';/*賦值*/ELSESETvar='world';ENDIF;/*IF結(jié)束*/INSERTINTOt1VALUES(var);
/*SQL語句*/selectcount(*)fromt1intonum;SELECTnameFROMt1LIMITnum,1INTOoutparams;END//delimiter;
callsp_test(1,@out);Select@out;事先創(chuàng)建表createtablet1(idintnotnullauto_increment,namevarchar(45),primarykeypk_id(id));delimiter//存儲過程的變量聲明變量:DECLAREvar_name[,...]type[DEFAULTvalue]
這個語句被用來聲明局部變量。要給變量提供一個默認(rèn)值,需要包含一個DEFAULT子句。值可以被指定為一個表達(dá)式,不需要為一個常數(shù)。如果沒有DEFAULT子句,初始值為NULL。
局部變量的作用范圍在它被聲明的BEGIN...END塊內(nèi)。它可以被用在嵌套的塊中,除了那些用相同名字聲明變量的塊。存儲過程的變量聲明變量:變量賦值變量賦值,SET語句:SETvar_name=expr[,var_name=expr]...也可以用語句代替SET來為用戶變量分配一個值。在這種情況下,分配符必須為:=而不能用=,因?yàn)樵诜荢ET語句中=被視為一個比較操作符,如下所示:
mysql>SET@t1=0,@t2=0,@t3=0;
mysql>SELECT@t1:=0,@t2:=0,@t3:=0;
對于使用select語句為變量賦值的情況,若返回結(jié)果為空,即沒有記錄,此時變量的值為上一次變量賦值時的值,如果沒有對變量賦過值,則為NULL。變量賦值變量賦值,SET語句:變量賦值,SELECT...INTO語句SELECTcol_name[,...]INTOvar_name[,...]table_expr這個SELECT語法把選定的列直接存儲到變量。因此,只有單一的行可以被取回。SELECTid,dataINTOx,yFROMtest.t1LIMIT1;變量賦值,SELECT...INTO語句BEGIN...END復(fù)合語句
[begin_label:]BEGIN[statement_list]END[end_label]
存儲子程序可以使用BEGIN...END復(fù)合語句來包含多個語句。statement_list代表一個或多個語句的列表。statement_list之內(nèi)每個語句都必須用分號(;)來結(jié)尾。
復(fù)合語句可以被標(biāo)記。除非begin_label存在,否則end_label不能被給出,并且如果二者都存在,他們必須是同樣的。
使用多重語句需要客戶端能發(fā)送包含語句定界符;的查詢字符串。這個符號在命令行客戶端被用delimiter命令來處理。改變查詢結(jié)尾定界符;(比如改變?yōu)?/)使得;可被用在子程序體中。BEGIN...END復(fù)合語句[begin_label:]流程控制IF語句IFsearch_conditionTHENstatement_list
[ELSEIFsearch_conditionTHENstatement_list]...
[ELSEstatement_list]ENDIF
IF實(shí)現(xiàn)了一個基本的條件構(gòu)造。如果search_condition求值為真,相應(yīng)的SQL語句列表被執(zhí)行。如果沒有search_condition匹配,在ELSE子句里的語句列表被執(zhí)行。statement_list可以包括一個或多個語句。
流程控制IF語句舉例:DELIMITER//CREATEPROCEDUREp1(INparameter1INT)BEGINDECLAREvariable1INT;SETvariable1=parameter1+1;IFvariable1=0THENINSERTINTOtVALUES(17);ENDIF;IFparameter1=0THENUPDATEtSETs1=s1+1;ELSEUPDATEtSETs1=s1+2;ENDIF;END//DELIMITER;舉例:CASE語句CASEcase_value
WHENwhen_valueTHENstatement_list
[WHENwhen_valueTHENstatement_list]...
[ELSEstatement_list]ENDCASEOr:CASE
WHENsearch_conditionTHENstatement_list
[WHENsearch_conditionTHENstatement_list]...
[ELSEstatement_list]ENDCASECASE語句存儲程序的CASE語句實(shí)現(xiàn)一個復(fù)雜的條件構(gòu)造。如果search_condition求值為真,相應(yīng)的SQL被執(zhí)行。如果沒有搜索條件匹配,在ELSE子句里的語句被執(zhí)行。舉例:CREATEPROCEDUREp2(INparameter1INT)BEGINDECLAREvariable1INT;SETvariable1=parameter1+1;CASEvariable1WHEN0THENINSERTINTOtVALUES(17);WHEN1THENINSERTINTOtVALUES(18);ELSEINSERTINTOtVALUES(19);ENDCASE;END//存儲程序的CASE語句實(shí)現(xiàn)一個復(fù)雜的條件構(gòu)造。如果searc循環(huán)語句WHILE…ENDWHILE舉例:
CREATEPROCEDUREp4()BEGINDECLAREvINT;SETv=0;WHILEv<5DOINSERTINTOtVALUES(v);SETv=v+1;ENDWHILE;END//循環(huán)語句循環(huán)語句LOOP…ENDLOOP舉例:CREATEPROCEDUREp5()BEGINDECLAREvINT;SETv=0;loop_label:LOOPINSERTINTOtVALUES(v);SETv=v+1;IFv>=5THENLEAVEloop_label;ENDIF;ENDLOOP;END//[begin_label:]LOOP
statement_listENDLOOP[end_label]LOOP允許某特定語句或語句群的重復(fù)執(zhí)行,實(shí)現(xiàn)一個簡單的循環(huán)構(gòu)造。在循環(huán)內(nèi)的語句一直重復(fù)直到循環(huán)被退出,退出通常伴隨著一個LEAVE語句。循環(huán)語句補(bǔ)充:迭代(ITERATE)語句CREATEPROCEDUREp7()BEGINDECLAREvINT;SETv=0;loop_label:LOOPIFv=3THENSETv=v+1;ITERATEloop_label;ENDIF;INSERTINTOtVALUES(v);SETv=v+1;IFv>=5THENLEAVEloop_label;ENDIF;ENDLOOP;END//補(bǔ)充:迭代(ITERATE)語句注釋語法:mysql存儲過程可使用兩種風(fēng)格的注釋雙模杠:--,該風(fēng)格一般用于單行注釋c風(fēng)格:/*注釋內(nèi)容*/,一般用于多行注釋使用權(quán)限:
CREATEROUTINE建立存儲過程ALTERROUTINE編輯和刪除存儲過程EXECUTE執(zhí)行存儲過程注釋語法:條件和異常處理程序DECLAREhandler_typeHANDLERFORcondition_value[,...]sp_statement
handler_type:
CONTINUE
|EXIT
condition_value:
SQLSTATE[VALUE]sqlstate_value
|condition_name
|SQLWARNING
|NOTFOUND
|SQLEXCEPTION這個語句指定每個可以處理一個或多個條件的處理程序。如果產(chǎn)生一個或多個條件,指定的語句被執(zhí)行。對一個CONTINUE處理程序,當(dāng)前子程序的執(zhí)行在執(zhí)行處理程序語句之后繼續(xù)。對于EXIT處理程序,當(dāng)前BEGIN...END復(fù)合語句的執(zhí)行被終止。條件和異常處理程序DECLAREhandler_typeSQLWARNING是對所有以01開頭的SQLSTATE代碼的速記。NOTFOUND是對所有以02開頭的SQLSTATE代碼的速記。SQLEXCEPTION是對所有沒有被SQLWARNING或NOTFOUND捕獲的SQLSTATE代碼的速記。聲明自定義條件:DECLAREcondition_nameCO
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024秋八年級英語上冊 Unit 10 If you go to the party you'll have a great time Section B (2a-2e)教案(新版)人教新目標(biāo)版
- 2023七年級歷史下冊 第二單元 遼宋夏金元時期:民族關(guān)系發(fā)展和社會變化第8課 金與南宋的對峙說課稿 新人教版
- 喜達(dá)屋酒店內(nèi)部員工管理制度
- 高考地理一輪復(fù)習(xí)第一章地球與地圖第一節(jié)經(jīng)緯網(wǎng)和地圖課件
- 自營業(yè)務(wù)外包合同(2篇)
- 腦卒中相關(guān)課件
- 布紋個性簡歷幻燈片模板
- 西京學(xué)院《應(yīng)用統(tǒng)計(jì)學(xué)》2022-2023學(xué)年第一學(xué)期期末試卷
- 西京學(xué)院《家具設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 西京學(xué)院《發(fā)電廠電氣系統(tǒng)》2022-2023學(xué)年期末試卷
- 3-4單元測試-2024-2025學(xué)年統(tǒng)編版語文六年級上冊
- 北師版數(shù)學(xué)八年級上冊 5.8三元一次方程組課件
- 2024混合動力汽車賽道專題報告-2024-10-市場解讀
- DB34T 4338-2022 行政規(guī)范性文件合法性審核規(guī)范
- 企業(yè)單位消防安全規(guī)范化管理指導(dǎo)手冊
- 廢舊物資回收投標(biāo)方案(技術(shù)方案)
- 九年級英語上學(xué)期期中考試(北京卷)-2024-2025學(xué)年九年級英語全一冊單元重難點(diǎn)易錯題精練(人教版)
- 宣傳視頻拍攝服務(wù)投標(biāo)方案(技術(shù)方案)
- 森林防火課件下載
- 項(xiàng)目進(jìn)度計(jì)劃表(范例)
- 3《歡歡喜喜慶國慶》(教學(xué)設(shè)計(jì))2024-2025學(xué)年統(tǒng)編版道德與法治二年級上冊
評論
0/150
提交評論