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

下載本文檔

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

文檔簡介

oracle存儲(chǔ)過程

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

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

參數(shù)1INNUMBER,

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

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

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

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論