oracle存儲(chǔ)過(guò)程培訓(xùn)材料動(dòng)畫(huà)本_第1頁(yè)
oracle存儲(chǔ)過(guò)程培訓(xùn)材料動(dòng)畫(huà)本_第2頁(yè)
oracle存儲(chǔ)過(guò)程培訓(xùn)材料動(dòng)畫(huà)本_第3頁(yè)
oracle存儲(chǔ)過(guò)程培訓(xùn)材料動(dòng)畫(huà)本_第4頁(yè)
oracle存儲(chǔ)過(guò)程培訓(xùn)材料動(dòng)畫(huà)本_第5頁(yè)
已閱讀5頁(yè),還剩64頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

oracle存儲(chǔ)過(guò)程

培訓(xùn)材料版權(quán)所有,2009?

CYTSSysnetElectronicsCO.,LTD壽險(xiǎn)二部帥曉鋒存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程的建立存儲(chǔ)過(guò)程的語(yǔ)法結(jié)構(gòu)存儲(chǔ)過(guò)程的控制語(yǔ)句存儲(chǔ)過(guò)程的開(kāi)發(fā)存儲(chǔ)過(guò)程的運(yùn)行存儲(chǔ)過(guò)程的調(diào)試Informix與oracle存儲(chǔ)過(guò)程的差異函數(shù)包2009/07/09存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程的編寫(xiě)編寫(xiě)后綴名為sql的文件,一個(gè)存儲(chǔ)過(guò)程一個(gè)文件。過(guò)程格式:CREATEORREPLACEPROCEDURE存儲(chǔ)過(guò)程名字(

參數(shù)1INNUMBER,

參數(shù)2INNUMBER)IS變量1INTEGER:=0;變量2DATE;BEGINEND存儲(chǔ)過(guò)程名字;2009/07/09存儲(chǔ)過(guò)程創(chuàng)建一個(gè)簡(jiǎn)單存儲(chǔ)過(guò)程的方式1、1.從Window打開(kāi)SQL*Plus并且從SQL*Plus登錄到你的數(shù)據(jù)庫(kù);打開(kāi)skeleton.sql文件.2.在SQL>命令提示符下輸入以下命令:SQL>@skeleton

注釋:(SQL*Plus裝載skeleton.sql文件的內(nèi)容到SQL*Plus緩沖區(qū),并且執(zhí)行SQL*Plus語(yǔ)句;SQL*Plus會(huì)通知你存儲(chǔ)過(guò)程已經(jīng)被成功地創(chuàng)建)3.寫(xiě)一個(gè)存儲(chǔ)過(guò)程,實(shí)例:CREATEORREPLACEPROCEDUREskeletonISBEGINDBMS_OUTPUT.PUT_LINE('HelloWorld!');END;2009/07/09存儲(chǔ)過(guò)程運(yùn)行查看信息1.SQL>EXECUTEskeleton;

注釋(SQL*Plus輸出一下信息確信存儲(chǔ)過(guò)程成功執(zhí)即PL/SQLproceduresuccessfullycompleted).2.在SQL*Plus命令行提示符,鍵入:SQL>SETSERVEROUTPUTON再次敲入SQL>EXECUTEskeleton即可.注釋:查看存儲(chǔ)過(guò)程中的打印語(yǔ)句信息,實(shí)行以上命令.2009/07/09存儲(chǔ)過(guò)程刪除一個(gè)存儲(chǔ)過(guò)程1.在SQL>命令提示符下輸入以下命令:命令:SQL>DROPPROCEDURE存儲(chǔ)過(guò)程名;2009/07/09存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程的注釋--注釋一行2009/07/09存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程入?yún)⑴c返回值createorreplaceprocedurerunbyparmeters(isalinemp.sal%type,snameoutvarchar,sjobinoutvarchar)asicountnumber;beginificount=1then....else....endif;end;2009/07/09存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程變量定義、常用變量類(lèi)型realsalemp.sal%type;realnamevarchar2(40);realjobvarchar2(40);

Pricenumber(5,2);Product_idinterger;注釋:同一存儲(chǔ)過(guò)程中,變量名最好不要重復(fù)。2009/07/09存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程賦值語(yǔ)句:=realjob:=‘work’;Product_id:=100001;realname:='Brunhilda';Price:=3.1415;this_day:=TODAY;2009/07/09存儲(chǔ)過(guò)過(guò)程存儲(chǔ)過(guò)過(guò)程變變量先聲明明且必必須聲聲明才才能使使用。。Beginend塊外聲聲明的的變量量影響響全局局。Beginend塊內(nèi)聲聲明的的變量量影響響本Beginend。變量聲聲明必必須在在存儲(chǔ)儲(chǔ)過(guò)程程開(kāi)頭頭或者者Beginend塊的開(kāi)開(kāi)頭部部分。。2009/07/09存儲(chǔ)過(guò)過(guò)程存儲(chǔ)過(guò)過(guò)程操操作符符+-*/||合并如如:sp_str1=““ASD””||”ERT”,則:sp_str1=““ASDERT”2009/07/09存儲(chǔ)過(guò)過(guò)程存儲(chǔ)過(guò)過(guò)程異異??乜刂芿xceptionwhentoo_many_rowsthenDBMS_OUTPUT.PUT_LINE('返回值多于于1行');whenothersthenDBMS_OUTPUT.PUT_LINE('在RUNBYPARMETERS過(guò)程中出錯(cuò)錯(cuò)!');2009/07/09存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程結(jié)結(jié)構(gòu)塊BEGIN第一步處理理;END;BEGIN第二步處理理;END;BEGIN第三步處理理;END;注釋:存儲(chǔ)過(guò)程BEGIN…END之間可以進(jìn)進(jìn)行嵌套。。2009/07/09存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程游游標(biāo)1.帶參數(shù)的游游標(biāo)CURSORC_USER(C_IDNUMBER)ISSELECTNAMEFROMUSERWHERETYPEID=C_IDNUMBER;OPENC_USER(變量值);LOOPFETCHC_USERINTOV_NAME;EXITWHENC_USER%NOTFOUND;ENDLOOP;CLOSEC_USER;2009/07/09存儲(chǔ)過(guò)程2.不帶參數(shù)的游游標(biāo)CURSORC_USERISSELECTNAMEFROMUSERWHERETYPEID=C_ID;OPENC_USER;LOOPFETCHC_USERINTOV_NAME;EXITWHENC_USER%NOTFOUND;ENDLOOP;CLOSEC_USER;2009/07/09存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程LOOP循環(huán)Counter:=0;LOOPcounter:=counter+1;EXITWHENcounter=5;ENDLOOP;2009/07/09存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程for循環(huán)1.方式一:BEGINFORcur_resultincurLOOPBEGINV_SUM:=cur_result.列名1+cur_result.列名2;END;ENDLOOP;END;2009/07/09存儲(chǔ)過(guò)程2.方式二:BEGINFORcur_resultREVERSE1..5LOOPBEGINDBMS_OUTPUT.PUT_LINE(cur_result);END;ENDLOOP;END;2009/07/09存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程while循環(huán)Counter:=0;WHILEcounter<6LOOPcounter:=counter+1;ENDLOOP;2009/07/09存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程if控制IFstr1>str2thenresult:=1;ELSIFstr2>str1THENresult:=-1;ELSEresult:=0;ENDIF;2009/07/09存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程if條件表達(dá)式比較符<\>\<=\>=\=\<>\!=ANDORNOT(NOT)BETWEENAND(NOT)IN(,,,,)IS(NOT)NULL(NOT)LIKE2009/07/09存儲(chǔ)過(guò)程%type定義方法1.在pl/sql中可以將變量量和常量聲明明為內(nèi)建或用用戶定義的數(shù)數(shù)據(jù)類(lèi)型,以引用一個(gè)列列名,同時(shí)繼承他的的數(shù)據(jù)類(lèi)型和和大小.注釋:v_anumber(5):=10;v_bv_a%type:=15;v_cv_a%type;2009/07/09存儲(chǔ)過(guò)程游標(biāo)屬性1.orcale在對(duì)DML操作時(shí)會(huì)產(chǎn)生生隱式游標(biāo).2.DML是指:insert、update、delete,select的操作.3.隱式游標(biāo)只使使用sql%found,sql%notfound,sql%rowcount三個(gè)屬性.4.sql%found,sql%notfound是布爾值,sql%rowcount是整數(shù)值。5.sql%found為true,sql%notfound為false.6.sql%rowcount是返回當(dāng)前位位置為止游標(biāo)標(biāo)讀取的記錄錄行數(shù).7.在執(zhí)行任何DML語(yǔ)句之前,sql%found,sql%notfound,sql%rowcount的值都是null.2009/07/09存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程控制制語(yǔ)句的跳出出exitwheneixt注釋:exit語(yǔ)句可立即結(jié)結(jié)束循環(huán)exitwhen語(yǔ)句是在指定定條件下結(jié)束束循環(huán),并且可以出現(xiàn)在循環(huán)代代碼中的任何何位置.2009/07/09存儲(chǔ)過(guò)程游標(biāo)的使用1.loop循環(huán).createorreplaceproceduredept_procedure(ainvarchar2,v_aoutdept%rowtype)is--聲明游標(biāo)cursorc_de(ainvarchar2)isselecttidfromdeptwheredname=a;begin--打開(kāi)游標(biāo),對(duì)對(duì)其中找到的的記錄進(jìn)行遍遍歷2009/07/09存儲(chǔ)過(guò)程openc_de(a);Loopfetchc_deintov_a;exitwhenc_de%notfound;//(exitwhen語(yǔ)句一定要要緊跟在fetch之后。必避避免多余的的數(shù)據(jù)處理理。)dbms_output.put_line('deptno:'||v_a.deptno);dbms_output.put_line('dname:'||v_a.dname);dbms_output.put_line('loc:'||v_a.loc);endloop;closec_de;end;2009/07/09存儲(chǔ)過(guò)程游標(biāo)的使用用2.for循環(huán).CURSORcur_testISSELECTp_number,p_name,p_manager,p_clientFROMprojectWHEREp_nameLIKE'S%';BEGININSERTINTOprojectVALUES(v_number,v_name,v_manager,v_client);FORrecINcur_testLOOPDBMS_OUTPUT.put_line(rec.p_number);DBMS_OUTPUT.put_line(rec.p_name);DBMS_OUTPUT.put_line(rec.p_manager);DBMS_OUTPUT.put_line(rec.p_client);ENDLOOP;END;2009/07/09存儲(chǔ)過(guò)過(guò)程游標(biāo)的的使用用3.while循環(huán).cursorc_postype(ainvarchar2)isselectbid,bidnamefromdeptwheredname=a;openc_postype(a);beginfetchc_postypeintov_postype,v_description;whilec_postype%foundloopfetchc_postypeintov_postype,v_description;endloop;closec_postype;end;2009/07/09存儲(chǔ)過(guò)程儲(chǔ)存過(guò)程嵌嵌套createorreplaceprocedureinnerBlock(p1invarchar2)aso1varchar2(10):='out1';inner1varchar2(20);Begindbms_output.put_line(‘…………’);begininner1:='inner1';exceptionwhenothersthennull;end;end;2009/07/09存儲(chǔ)過(guò)程儲(chǔ)存過(guò)程中中建表createorreplaceprocedureskeletonasbeginexecuteimmediate'createtabletable1(idnumber,namevarchar2(20))';End;2009/07/09存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程的的返回值Oracle存儲(chǔ)過(guò)程的的返回值,必須在創(chuàng)建建一個(gè)存儲(chǔ)儲(chǔ)過(guò)程時(shí)定定義返回值值.2009/07/09存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程的的執(zhí)行Executexxx;Executexxx(值1,值2);Callxxx(值1,值2,值3);Selectxxx(值1)fromdual;注釋:Selectxxx(值1)fromdual用法一般只只在函數(shù)及及包代碼中中用到.2009/07/09存儲(chǔ)過(guò)程常用存儲(chǔ)過(guò)過(guò)程介紹Spcmpdaysum(sp_statdate,26)Spcmpmonthsum(sp_statdate)Spfnul2zero2009/07/09存儲(chǔ)過(guò)程開(kāi)發(fā)一個(gè)存存儲(chǔ)過(guò)程1.不帶參數(shù)的的儲(chǔ)存過(guò)程程createorreplaceprocedurerunbyparmetersbeginificount=1then....else....endif;exception//存儲(chǔ)過(guò)程異異常whentoo_many_rowsthenDBMS_OUTPUT.PUT_LINE('返回值多于于1行');whenothersthenDBMS_OUTPUT.PUT_LINE('在RUNBYPARMETERS過(guò)程中出錯(cuò)錯(cuò)!');end;2009/07/09存儲(chǔ)過(guò)程開(kāi)發(fā)一個(gè)存存儲(chǔ)過(guò)程注釋:如果沒(méi)有orreplace語(yǔ)句,則僅僅僅是新建建一個(gè)存儲(chǔ)儲(chǔ)過(guò)程,如果系統(tǒng)存存在該存儲(chǔ)儲(chǔ)過(guò)程,則則會(huì)報(bào)錯(cuò)。。Createorreplaceprocedure如果系統(tǒng)中中沒(méi)有此存存儲(chǔ)過(guò)程就就新建一個(gè)個(gè),如果系系統(tǒng)中有此此存儲(chǔ)過(guò)程程則把原來(lái)來(lái)刪除掉,,重新創(chuàng)建建一個(gè)存儲(chǔ)儲(chǔ)過(guò)程.存儲(chǔ)過(guò)程名名定義:包包括存儲(chǔ)過(guò)過(guò)程名和參參數(shù)列表,參數(shù)名和參參數(shù)類(lèi)型,參數(shù)名不能能重復(fù).as(is)為關(guān)鍵字,可以理解為為pl/sql的declare關(guān)鍵字,用于聲明變變量.2009/07/09存儲(chǔ)過(guò)程開(kāi)發(fā)一個(gè)存存儲(chǔ)過(guò)程2.帶參數(shù)的儲(chǔ)儲(chǔ)存過(guò)程createorreplaceprocedurerunbyparmeters(isalinemp.sal%type,snameoutvarchar,sjobinoutvarchar)asicountnumber;beginselectcount(*)intoicountfromempwheresal>isalandjob=sjob;ificount=1thenelseendif;exception//存儲(chǔ)過(guò)程異常常whentoo_many_rowsthenDBMS_OUTPUT.PUT_LINE('返回值多于1行');whenothersthenDBMS_OUTPUT.PUT_LINE('在RUNBYPARMETERS過(guò)程中出錯(cuò)??!');end;2009/07/09存儲(chǔ)過(guò)程開(kāi)發(fā)一個(gè)存儲(chǔ)儲(chǔ)過(guò)程注釋:sal%type目的是為了保保持與傳參過(guò)過(guò)來(lái)的數(shù)據(jù)寬寬度一致.IN/OUT即可作輸入?yún)?shù),也可作作輸出參數(shù)。。變量聲明塊::緊跟著的as(is)關(guān)鍵字,用于聲明變量量。IN按值傳遞,并并且它不允許許在存儲(chǔ)過(guò)程程中被重新賦賦值。如果存存儲(chǔ)過(guò)程的參參數(shù)沒(méi)有指定定存參數(shù)傳遞遞類(lèi)型,默認(rèn)認(rèn)為IN.OUT參數(shù):作為輸輸出參數(shù),需需要注意,當(dāng)當(dāng)一個(gè)參數(shù)被被指定為OUT類(lèi)型時(shí),就算算在調(diào)用存儲(chǔ)儲(chǔ)過(guò)程之前對(duì)對(duì)該參數(shù)進(jìn)行行了賦值,在在存儲(chǔ)過(guò)程中中該參數(shù)的值值仍然是null.IN參數(shù)的寬度是是由外部決定定,對(duì)于OUT和INOUT參數(shù)的寬度是是由存儲(chǔ)過(guò)程程內(nèi)部決定。。2009/07/09存儲(chǔ)過(guò)程開(kāi)發(fā)一個(gè)存儲(chǔ)儲(chǔ)過(guò)程3.參數(shù)的存儲(chǔ)過(guò)過(guò)程默認(rèn)值createorreplaceprocedureprocdefault(p1varchar2,p2varchar2default'mark')asbegindbms_output.put_line(p2);end;SQL>execprocdefault('a');或者SQL>execprocdefault2(p2=>'aa');注釋:1.可以通過(guò)default關(guān)鍵字為存儲(chǔ)儲(chǔ)過(guò)程的參數(shù)數(shù)指定默認(rèn)值值。在對(duì)存儲(chǔ)儲(chǔ)過(guò)程調(diào)用時(shí)時(shí),就可以省省略默認(rèn)值。。2.默認(rèn)值僅僅支支持IN傳輸類(lèi)型的參參數(shù)。OUT和INOUT不能指定默認(rèn)認(rèn)值2009/07/09存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程調(diào)用用方式1.方式一:Declarerealsalemp.sal%type;realnamevarchar(40);realjobvarchar(40);BEGINrealsal:=1100;realname:='';realjob:='CLERK';runbyparmeters(realsal,realname,realjob);--必須按順順序DBMS_OUTPUT.PUT_LINE(REALNAME||''||REALJOB);(輸出模式)END;2009/07/09存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程調(diào)用用方式2.方式二:declarerealsalemp.sal%type;realnamevarchar(40);realjobvarchar(40);beginrealsal:=1100;realname:='';realjob:='CLERK';runbyparmeters(sname=>realname,isal=>realsal,sjob=>realjob);---指定值對(duì)應(yīng)變變量順序可變變DBMS_OUTPUT.PUT_LINE(REALNAME||''||REALJOB);(輸出模式)END;2009/07/09存儲(chǔ)過(guò)程儲(chǔ)存過(guò)程調(diào)試試declareparam_outvarchar2(28);param_inoutvarchar2(28);beginparam_inout:='ff';proce_test('dd',param_out,param_inout);dbms_output.put_line(param_out);end;注釋:存儲(chǔ)過(guò)程調(diào)試試主要根據(jù)開(kāi)開(kāi)發(fā)者自己的的決定,一般情況下通通過(guò)打印語(yǔ)句句來(lái)完成,這里就不詳細(xì)細(xì)說(shuō)明.2009/07/09存儲(chǔ)過(guò)程系統(tǒng)異常錯(cuò)誤誤信息ACCESS_INTO_NULL試圖圖給給為為初初始始化化對(duì)對(duì)象象的的屬屬性性賦賦值值CASE_NOT_FOUNDCASE中若若未未包包含含相相應(yīng)應(yīng)的的WHEN,并并且且沒(méi)沒(méi)有有設(shè)設(shè)置置COLLECTION_IS_NULL試圖向向?yàn)槌醭跏蓟那肚短妆肀砗妥冏冮L(zhǎng)數(shù)數(shù)組賦賦值時(shí)時(shí),引發(fā)異異常CURSER_ALREADY_OPEN試圖打打開(kāi)一一個(gè)已已經(jīng)打打開(kāi)的的游標(biāo)標(biāo)時(shí)產(chǎn)產(chǎn)生異異常DUP_VAL_ON_INDEX唯一索索引對(duì)對(duì)應(yīng)的的列上上有重重復(fù)的的值INVALID_CURSOR在不合合法的的游標(biāo)標(biāo)上進(jìn)進(jìn)行操操作INVALID_NUMBER內(nèi)嵌的的SQL語(yǔ)句不不能將將字符符轉(zhuǎn)換換為數(shù)數(shù)字NO_DATA_FOUND使用selectinto未返回回行,,或企企圖在在表中中訪問(wèn)問(wèn)為初初始化化的數(shù)數(shù)據(jù)TOO_MANY_ROWS執(zhí)行selectinto時(shí),結(jié)結(jié)果集集超過(guò)過(guò)一行行ZERO_DIVIDE試圖用用0除某個(gè)個(gè)數(shù)字字SUBSCRIPT_BEYOND_COUNT元素下下標(biāo)超超過(guò)嵌嵌套表表或VARRAY的最大大值SUBSCRIPT_OUTSIDE_LIMIT試圖使使用嵌嵌套表表或VARRAY時(shí),將將下標(biāo)標(biāo)指定定為負(fù)負(fù)數(shù)2009/07/09存儲(chǔ)過(guò)過(guò)程系統(tǒng)異異常錯(cuò)錯(cuò)誤信信息VALUE_ERROR發(fā)生算算術(shù),轉(zhuǎn)換,截?cái)嗷蚧虼笮⌒〖s束束錯(cuò)誤誤.LOGIN_DENIEDPL/SQL應(yīng)用程程序連連接到到oracle數(shù)據(jù)庫(kù)庫(kù)時(shí),,提供供了不不正確確的用用戶名名或密碼NOT_LOGGED_ONPL/SQL應(yīng)用程序在在試圖連接接數(shù)據(jù)庫(kù)之之前訪問(wèn)數(shù)數(shù)據(jù)庫(kù)中的的數(shù)據(jù)PROGRAM_ERRORPL/SQL內(nèi)部問(wèn)題,,可能需要要重裝數(shù)據(jù)據(jù)字典&pl./SQL系統(tǒng)包ROWTYPE_MISMATCH宿主游標(biāo)變變量與PL/SQL游標(biāo)變量的的返回類(lèi)型型不兼容SELF_IS_NULL使用對(duì)象類(lèi)類(lèi)型時(shí),在在null對(duì)象上調(diào)用用對(duì)象方法法STORAGE_ERROR運(yùn)行PL/SQL時(shí),內(nèi)存用用盡或者內(nèi)內(nèi)存出現(xiàn)問(wèn)問(wèn)題SYS_INVALID_ID無(wú)效的ROWID字符串TIMEOUT_ON_RESOURCE當(dāng)數(shù)據(jù)庫(kù)等等待某資源源時(shí)超時(shí)2009/07/09存儲(chǔ)過(guò)程O(píng)RACLE和informix存儲(chǔ)過(guò)程區(qū)區(qū)別1.建立存儲(chǔ)過(guò)過(guò)程的語(yǔ)法法Oracle:create[orreplace]procedureprocedue_name[(arg1[{in|out|inout}]type(argn[{in|out|inout}]type,)]{is|as}[變量定義區(qū)區(qū)]beginendprocedure_name;Informix:createprocedureproc_name([....in_parameter_list])returningout_para_list/out_result_set;2009/07/09存儲(chǔ)過(guò)程O(píng)RACLE和informix存儲(chǔ)過(guò)程區(qū)區(qū)別2.沒(méi)有參數(shù)也也沒(méi)有返回回值Oracle:createorreplaceprocedurepNoParamasbegindeletefromt1;commit;end;endpNoParam;Informix:2009/07/09存儲(chǔ)過(guò)程createprocedurepNoParam()Returningintbeginonexceptionrollbackwork;endexceptionbeginwork;deletefromt1;commitwork;return;end;endprocedure;2009/07/09存儲(chǔ)過(guò)程程O(píng)RACLE和informix存儲(chǔ)過(guò)程程區(qū)別3.返回記錄錄集Oracle:procedurepReturnSet(RefCursoroutvarchar2,Refdefineoutvarchar2)aslocalCursorTestRefCursorTyp;localnumberTestRefCursorTyp;beginselectf1,f2intolocalCursor,localnumberfromt1;RefCursor:=localCursor;Refdefine:=localnumber;endpReturnSet;2009/07/09存儲(chǔ)過(guò)程程Informix:createprocedurepReturnSet()returninginteger;defineiinteger;definejvarchar(10);beginforeachselectf1,f2intoi,jfromt1endforeach;returni,j;End;endprocedure;2009/07/09存儲(chǔ)過(guò)程程O(píng)RACLE和informix存儲(chǔ)過(guò)程程區(qū)別4.錯(cuò)誤捕捉捉Oracle:ExceptionwhenothersthenDBMS_OUTPUT.PUT_LINE('在XX過(guò)程中出出錯(cuò)!');Informix:ONEXCEPTIONSETsp_errsql,sp_errisam,sp_errstrIF(sp_errsql!=0)THENRAISEEXCEPTION-746,sp_errisam,",錯(cuò)誤碼:["||sp_errsql||"]";ENDIF;ENDEXCEPTION;2009/07/09存儲(chǔ)過(guò)程程O(píng)RACLE和informix存儲(chǔ)過(guò)程程區(qū)別5.對(duì)游標(biāo)的的處理Oracle:createorreplaceprocedurepHasCursorasv_f1number(10,0);cursorcurt1isselectf1fromt1forupdate;beginopencurt1;loopfetchcurt1Intov_f1;exitwhencurt1%notfound;endloop;Closecurt1;End;2009/07/09存儲(chǔ)過(guò)程程Informix:createprocedurepHasCursor()definev_f1integer;beginforeachselectf1intov_f1fromt1--注意這里里沒(méi)有分分號(hào)if(v_f1=1)thenupdatet1setf2='one'wheref3=‘1001’’;endif;endforeach;End;EndpHasCursor;2009/07/09存儲(chǔ)過(guò)過(guò)程O(píng)RACLE和informix存儲(chǔ)過(guò)過(guò)程區(qū)區(qū)別6.打印調(diào)調(diào)試信信息的的處理理Oracle:DBMS_OUTPUT.PUT_LINE(‘開(kāi)始執(zhí)執(zhí)行存存儲(chǔ)過(guò)過(guò)程’’);DBMS_OUTPUT.PUT_LINE('v_date='||v_date);DBMS_OUTPUT.PUT_LINE(‘存儲(chǔ)過(guò)過(guò)程執(zhí)執(zhí)行完完畢’’);Informix:setdebugfileto"trace_check";--withappend;說(shuō)明““withappend”表示以以追加加模式式打開(kāi)開(kāi)跟蹤蹤結(jié)果果文trace'開(kāi)始執(zhí)執(zhí)行存存儲(chǔ)過(guò)過(guò)程'trace'v_date='||v_date;trace‘‘存儲(chǔ)過(guò)過(guò)程執(zhí)執(zhí)行完完畢’’traceoff;2009/07/09存儲(chǔ)過(guò)過(guò)程O(píng)RACLE和informix存儲(chǔ)過(guò)過(guò)程區(qū)區(qū)別7.關(guān)于參參數(shù)的的說(shuō)明明注釋:如果存存儲(chǔ)過(guò)過(guò)程想想返回回一個(gè)個(gè)參數(shù)數(shù),在informix中是通通過(guò)返返回值值的形形式實(shí)實(shí)現(xiàn)的的,而在oracle是通過(guò)過(guò)輸出出參數(shù)數(shù)或者者輸入入輸出出參數(shù)數(shù)實(shí)現(xiàn)現(xiàn)的.Oracle:createorreplaceprocedurep1(xoutnumber)asbeginx:=0;endp1;Informix:createprocedurep1()returninginteger;return0;2009/07/09存儲(chǔ)過(guò)過(guò)程O(píng)RACLE和informix存儲(chǔ)過(guò)過(guò)程區(qū)區(qū)別8.存儲(chǔ)過(guò)過(guò)程中中調(diào)用用另一一個(gè)存存儲(chǔ)過(guò)過(guò)程O(píng)racle:CallpNoParam;CallpNormalParam(1,‘‘a(chǎn)’’,v_Result);Informix:spNoParam()pNormalParam(1,‘‘a(chǎn)’’)returningv_Result;2009/07/09存儲(chǔ)過(guò)過(guò)程O(píng)RACLE和informix存儲(chǔ)過(guò)過(guò)程區(qū)區(qū)別9.if使用Oracle:IFstr1>str2thenresult:=1;ELSIFstr2>str1THENresult:=-1;ELSEresult:=0;ENDIFInformix:2009/07/09存儲(chǔ)過(guò)過(guò)程IFstr1>str2thenresult=1;ELIFstr2>str1THENresult=-1;ELSEresult=0;ENDIF2009/07/09存儲(chǔ)過(guò)過(guò)程O(píng)RACLE和informix存儲(chǔ)儲(chǔ)過(guò)過(guò)程程區(qū)區(qū)別別10.賦值值Oracle:v_1:=100;Informix:letv_1=100;2009/07/09存儲(chǔ)儲(chǔ)過(guò)過(guò)程程練習(xí)習(xí)創(chuàng)建建一一個(gè)個(gè)存存儲(chǔ)儲(chǔ)過(guò)過(guò)程程,使用用游游標(biāo)標(biāo)從從dept表中中取取BID為’’010’’開(kāi)頭頭的的記記錄錄信信息息,把它它往往表表t01_psn中插插入入一一條條記記錄錄,并且且循循環(huán)環(huán)打打印印插插入入的的數(shù)數(shù)據(jù)據(jù)記記錄錄.2009/07/09函數(shù)數(shù)1.函數(shù)數(shù)結(jié)結(jié)構(gòu)構(gòu)CREATEORREPLACEFUNCTION函數(shù)數(shù)名名(參數(shù)數(shù)1INNUMBER,參數(shù)數(shù)2INNUMBER)RETURN類(lèi)型IS|ASBEGINFUNCTION_BODYEND函數(shù)名名;注釋:函數(shù)與與存儲(chǔ)儲(chǔ)過(guò)程程相似似,唯一區(qū)區(qū)別函函數(shù)必

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論