版權(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ǔ)過程程開頭或者Beginend塊的開頭部分分。2009/07/09存儲(chǔ)過程存儲(chǔ)過程操作作符+-*/||合并如如:sp_str1=“ASD”||””ERT”,則:sp_str1=“ASDERT””2009/07/09存儲(chǔ)過程存儲(chǔ)過程異常??刂芿xceptionwhentoo_many_rowsthenDBMS_OUTPUT.PUT_LINE('返回值多于1行');whenothersthenDBMS_OUTPUT.PUT_LINE('在RUNBYPARMETERS過程中出錯(cuò)!!');2009/07/09存儲(chǔ)過程存儲(chǔ)過程結(jié)構(gòu)構(gòu)塊BEGIN第一步處理;;END;BEGIN第二步處理;;END;BEGIN第三步處理;;END;注釋:存儲(chǔ)過程BEGIN……END之間可以進(jìn)行行嵌套。2009/07/09存儲(chǔ)過程存儲(chǔ)過程游標(biāo)標(biāo)1.帶參數(shù)的游標(biāo)標(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ù)據(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ò)錯(cuò)!');end;2009/07/09存儲(chǔ)過程開發(fā)一個(gè)存存儲(chǔ)過程注釋:sal%type目的是為了了保持與傳傳參過來的的數(shù)據(jù)寬度度一致.IN/OUT即可作輸入入?yún)?shù),也也可作輸出出參數(shù)。變量聲明塊塊:緊跟著著的as(is)關(guān)鍵字,用于聲明變變量。IN按值傳遞,,并且它不不允許在存存儲(chǔ)過程中中被重新賦賦值。如果果存儲(chǔ)過程程的參數(shù)沒沒有指定存存參數(shù)傳遞遞類型,默默認(rèn)為IN.OUT參數(shù):作為為輸出參數(shù)數(shù),需要注注意,當(dāng)一一個(gè)參數(shù)被被指定為OUT類型時(shí),就就算在調(diào)用用存儲(chǔ)過程程之前對(duì)該該參數(shù)進(jìn)行行了賦值,,在存儲(chǔ)過過程中該參參數(shù)的值仍仍然是null.IN參數(shù)的寬度度是由外部部決定,對(duì)于OUT和INOUT參數(shù)的寬度度是由存儲(chǔ)儲(chǔ)過程內(nèi)部部決定。2009/07/09存儲(chǔ)過程開發(fā)一個(gè)存存儲(chǔ)過程3.參數(shù)的存儲(chǔ)儲(chǔ)過程默認(rèn)認(rèn)值createorreplaceprocedureprocdefault(p1varchar2,p2varchar2default'mark')asbegindbms_output.put_line(p2);end;SQL>execprocdefault('a');或者SQL>execprocdefault2(p2=>'aa');注釋:1.可以通過default關(guān)鍵字為存存儲(chǔ)過程的的參數(shù)指定定默認(rèn)值。。在對(duì)存儲(chǔ)儲(chǔ)過程調(diào)用用時(shí),就可可以省略默默認(rèn)值。2.默認(rèn)值僅僅僅支持IN傳輸類型的的參數(shù)。OUT和INOUT不能指定默默認(rèn)值2009/07/09存儲(chǔ)過程存儲(chǔ)過程調(diào)調(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)調(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)應(yīng)變量順序序可變DBMS_OUTPUT.PUT_LINE(REALNAME||''||REALJOB);(輸出模式)END;2009/07/09存儲(chǔ)過程儲(chǔ)存過程調(diào)調(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)調(diào)試主要根根據(jù)開發(fā)者者自己的決決定,一般情況下下通過打印印語句來完完成,這里就不詳詳細(xì)說明.2009/07/09存儲(chǔ)過程系統(tǒng)異常錯(cuò)錯(cuò)誤信息ACCESS_INTO_NULL試圖給為初初始化對(duì)象象的屬性賦賦值CASE_NOT_FOUNDCASE中若未包含含相應(yīng)的WHEN,并且沒有有設(shè)置COLLECTION_IS_NULL試圖向?yàn)槌醭跏蓟那肚短妆砗妥冏冮L數(shù)組賦賦值時(shí),引發(fā)異常CURSER_ALREADY_OPEN試圖打開一一個(gè)已經(jīng)打打開的游標(biāo)標(biāo)時(shí)產(chǎn)生異異常DUP_VAL_ON_INDEX唯一一索索引引對(duì)對(duì)應(yīng)應(yīng)的的列列上上有有重重復(fù)復(fù)的的值值INVALID_CURSOR在不不合合法法的的游游標(biāo)標(biāo)上上進(jìn)進(jìn)行行操操作作INVALID_NUMBER內(nèi)嵌嵌的的SQL語句句不不能能將將字字符符轉(zhuǎn)轉(zhuǎn)換換為為數(shù)數(shù)字字NO_DATA_FOUND使用用selectinto未返返回回行行,,或或企企圖圖在在表表中中訪訪問問為為初初始始化化的的數(shù)數(shù)據(jù)據(jù)TOO_MANY_ROWS執(zhí)行行selectinto時(shí),,結(jié)結(jié)果果集集超超過過一一行行ZERO_DIVIDE試圖圖用用0除某某個(gè)個(gè)數(shù)數(shù)字字SUBSCRIPT_BEYOND_COUNT元素素下下標(biāo)標(biāo)超超過過嵌嵌套套表表或或VARRAY的最最大大值值SUBSCRIPT_OUTSIDE_LIMIT試圖圖使使用用嵌嵌套套表表或或VARRAY時(shí),,將將下下標(biāo)標(biāo)指指定定為為負(fù)負(fù)數(shù)數(shù)2009/07/09存儲(chǔ)儲(chǔ)過過程程系統(tǒng)統(tǒng)異異常常錯(cuò)錯(cuò)誤誤信信息息VALUE_ERROR發(fā)生生算算術(shù)術(shù),轉(zhuǎn)換換,截?cái)鄶嗷蚧虼蟠笮⌒〖s約束束錯(cuò)錯(cuò)誤誤.LOGIN_DENIEDPL/SQL應(yīng)用用程程序序連連接接到到oracle數(shù)據(jù)據(jù)庫庫時(shí)時(shí),,提提供供了了不不正正確確的的用用戶戶名名或密密碼碼NOT_LOGGED_ONPL/SQL應(yīng)用用程程序序在在試試圖圖連連接接數(shù)數(shù)據(jù)據(jù)庫庫之之前前訪訪問問數(shù)數(shù)據(jù)據(jù)庫庫中中的的數(shù)數(shù)據(jù)據(jù)PROGRAM_ERRORPL/SQL內(nèi)部部問問題題,,可可能能需需要要重重裝裝數(shù)數(shù)據(jù)據(jù)字字典典&&pl./SQL系統(tǒng)統(tǒng)包包ROWTYPE_MISMATCH宿主主游游標(biāo)標(biāo)變變量量與與PL/SQL游標(biāo)標(biāo)變變量量的的返返回回類類型型不不兼兼容容SELF_IS_NULL使用用對(duì)對(duì)象象類類型型時(shí)時(shí),,在在null對(duì)象象上上調(diào)調(diào)用用對(duì)對(duì)象象方方法法STORAGE_ERROR運(yùn)行行PL/SQL時(shí),,內(nèi)內(nèi)存存用用盡盡或或者者內(nèi)內(nèi)存存出出現(xiàn)現(xiàn)問問題題SYS_INVALID_ID無效效的的ROWID字符符串串TIMEOUT_ON_RESOURCE當(dāng)數(shù)數(shù)據(jù)據(jù)庫庫等等待待某某資資源源時(shí)時(shí)超超時(shí)時(shí)2009/07/09存儲(chǔ)儲(chǔ)過過程程ORACLE和informix存儲(chǔ)儲(chǔ)過過程程區(qū)區(qū)別別1.建立立存存儲(chǔ)儲(chǔ)過過程程的的語語法法Oracle:create[orreplace]procedureprocedue_name[(arg1[{in|out|inout}]type(argn[{in|out|inout}]type,)]{is|as}[變量定義區(qū)]beginendprocedure_name;Informix:createprocedureproc_name([....in_parameter_list])returningout_para_list/out_result_set;2009/07/09存儲(chǔ)過程ORACLE和informix存儲(chǔ)過程區(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ū)別別6.打印調(diào)試信息息的處理Oracle:DBMS_OUTPUT.PUT_LINE(‘開始執(zhí)行存儲(chǔ)儲(chǔ)過程’);DBMS_OUTPUT.PUT_LINE('v_date='||v_date);DBMS_OUTPUT.PUT_LINE(‘存儲(chǔ)過程執(zhí)行行完畢’);Informix:setdebugfileto"trace_check";--withappend;說明“withappend”表示以追加模模式打開跟蹤蹤結(jié)果文trace'開始執(zhí)行存儲(chǔ)儲(chǔ)過程'trace'v_date='||v_date;trace‘‘存儲(chǔ)過程執(zhí)行行完畢’traceoff;2009/07/09存儲(chǔ)過程ORACLE和informix存儲(chǔ)過程區(qū)別別7.關(guān)于參數(shù)的說說明注釋:如果存儲(chǔ)過程程想返回一個(gè)個(gè)參數(shù),在informix中是通過返回回值的形式實(shí)實(shí)現(xiàn)的,而在oracle是通過輸出參參數(shù)或者輸入入輸出參數(shù)實(shí)實(shí)現(xiàn)的.Oracle:createorreplaceprocedurep1(xoutnumber)asbeginx:=0;endp1;Informix:createprocedurep1()returninginteger;return0;2009/07/09存儲(chǔ)過程ORACLE和informix存儲(chǔ)過程區(qū)別別8.存儲(chǔ)過程中調(diào)調(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ū)別別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ǔ)過程區(qū)別別10.賦值Oracle:v_1:=100;Informix:letv_1=100;2009/07/09存儲(chǔ)過程練習(xí)創(chuàng)建一個(gè)存儲(chǔ)儲(chǔ)過程,使用游標(biāo)從dept表中取BID為’010’開頭的記錄信信息,把它往表t01_psn中插入一條記記錄,并且循環(huán)打印印插入的數(shù)據(jù)據(jù)記錄.2009/07/09函數(shù)1.函數(shù)結(jié)構(gòu)CREATEORREPLACEFUNCTION函數(shù)名(參數(shù)1INNUMBER,參數(shù)2INNUMBER)RETURN類型IS|ASBEGINFUNCTION_BODYEND函數(shù)名;注釋:函數(shù)與存儲(chǔ)過過程相似,唯一區(qū)別函數(shù)數(shù)必須向調(diào)用用他的語句返返回一個(gè)值,它與存儲(chǔ)過合合起來被稱為為存儲(chǔ)子程序序,從某種意義講講為小程序.2009/07/09函數(shù)創(chuàng)建一個(gè)函數(shù)數(shù)CREATEORREPLACEFUNCTIONAREA(P_radiusinnumber)returnnumberAsV_pinumber:=3.145;V_area
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度干果行業(yè)品牌合作推廣合同范本3篇
- 二零二五年度奢侈品國際貿(mào)易合同售后服務(wù)條款3篇
- 二零二五年度房地產(chǎn)買賣合同:甲乙雙方關(guān)于房產(chǎn)買賣的詳細(xì)約定
- 二零二五年度地質(zhì)鉆探打管樁分包勞務(wù)合同實(shí)施細(xì)則
- 二零二五年度建筑材料代理授權(quán)合同協(xié)議2篇
- 感恩潤心青春不悔
- 二零二五年度房產(chǎn)抵押買賣全流程合同3篇
- 動(dòng)脈瘤性蛛網(wǎng)膜下腔出血
- 二零二五年度四合院買賣合同與可持續(xù)發(fā)展戰(zhàn)略協(xié)議3篇
- 二零二五年度國際化工原料進(jìn)口貿(mào)易合同3篇
- (一模)株洲市2025屆高三教學(xué)質(zhì)量統(tǒng)一檢測 英語試卷
- 社區(qū)意識(shí)形態(tài)工作責(zé)任制實(shí)施細(xì)則模版(2篇)
- 礦業(yè)公司規(guī)章制度匯編
- 介入導(dǎo)管室護(hù)士長職責(zé)
- 《國家課程建設(shè)》課件
- 四川省南充市2023-2024學(xué)年高一上學(xué)期期末考試 歷史 含解析
- 2024-2025學(xué)年湖北省武漢市華中師大一附中高三上學(xué)期期中英語試題及答案
- 浙江省衢州市2023-2024學(xué)年高一上學(xué)期1月期末數(shù)學(xué)試題 含解析
- 大學(xué)老師工作述職報(bào)告
- 辦公樓裝飾裝修工程施工組織設(shè)計(jì)方案
- 電子元器件有效貯存期、超期復(fù)驗(yàn)及裝機(jī)前的篩選要求
評(píng)論
0/150
提交評(píng)論