资源描述:
《oracle讲解_存储过程的调用》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、一.存储过程(PROCEDURE)使用过程,不仅可以简化客户端应用程序的开发和维护,而且可以提高应用程序的运行性能.CREATE[ORREPLACE]PROCUDUREprocedure_name(arg1[model1]datatype1,arg2[model2]datatype2)IS[AS]PL/SQLBlock;arg1,arg2用于指定过程的参数,IS/AS用于开始一个PL/SQL块.当指定参数数据类型时,不能指定其长度.在建立过程的时间,既可以指定输入参数(IN),也可以指定输出参数(OUT)以及输入输出参数(INOUT).
2、如果不定义参数模式,则默认为输入参数,如果要定义输出参数,则需要指定OUT关键字,如果定义输入输出参数,要指定INOUT关键字.一般使用execute(或exec)过程名或者call过程名来调用过程.setserveroutputon打开oracle的输出.(1)不带参数的过程CREATEORREPLACEPROCEDUREout_timeISBEGINdbms_output.put_line(systimestamp);END;callout_time();或者execout_time;(2)带IN参数的过程如果不指定参数模式,则默认
3、的为IN,也可以显示的指定输入模式IN.CREATEORREPLACEPROCEDUREadd_employee(enoNUMBER,nameVARCHAR2,salNUMBER,jobVARCHAR2DEFAULT'CCC',dnoNUMBER)ISBEGININSERTINTOemp(empno,ename,sal,job,deptno)VALUES(eno,ename,sal,job,dno);EXCEPTIONWHENDUP_VAL_ON_INDEXTHENRAISE_APPLICATION_ERROR(-20000,'雇员不能
4、重复');END;除了默认值的参数外,其余的都要输入.(3)带OUT的过程在过程中输出结果是使用OUT或者INOUT来完成的.定义输出参数的时间,必须要使用OUT来定义输出.CREATEORREPLACEPROCEDUREquery_employee(enoNUMBER,nameOUTVARCHAR2,salOUTNUMBER)ISBEGINSELECTename,salINTOname,salFROMempWHEREempno=eno;EXCEPTIONWHENNO_DATA_FOUNDTHENRAISE_APPLICATION_ER
5、ROR(-20000,'雇员不存在');END;对于指定为OUT类型的参数,必须定义变量接收输出参数的数据.调用实例:SQL>varnameVARCHAR2(10)SQL>varsalNUMBERSQL>execquery_employee(77,:name,:sal)SQL>printnamesal(4)带IN和OUT的过程在调用前要通过变量给参数传递数据,在调用结束后,会通过此变量将值传递给应用程序CREATEORPROCEDUREcompute(numINOUTNUMBER,num2INOUTNUMBER)ISv1NUMBER;v
6、2NUMBER;BEGINv1:=num1/num2;v2:=MOD(num1,num2);num1:=v1;num2:=v2;END;在应用程序调用INOUT的存储过程时,必须提供两个变量临时存放数值,运行如下:SQL>varn1NUMBERSQL>varn2NUMBERSQL>exec:n1:=100SQL>exec:n2:=30SQL>execcompute(:n1,:n2)SQL>PRINTn1n2(5)为参数传递变量和数据[1]位置传递如SQL>execadd_dept(50,'SALES','NEWYORK')[2]名称传递
7、,使用=>符号来指定值如SQL>execadd_dept(dno=>50)[3]组合传递,以上两种传递方法交替(6)查看过程的源代码过程名,源代码,执行代码放到了数据字典中,通过查询数据字典USER_SOURCE,可以显示当前用户定义的过程SELECTtextFROMuser_sourceWHEREname='ADD_DEPT';(7)删除过程DROPPROCEDURE过程名二.函数(FUNCTION)CREATE[ORREPLACE]FUNCTIONfunction_name(arg1[model1]datatype1,arg2[mo
8、del2]datatype2)RETURNdatatypeIS
9、ASPL/SQLBlock;arg1,arg2指定函数的参数,当不指定参数数据类型时,不能指定其长度RETURN指定函数返回的数据类型.注意,