资源描述:
《oracle 存储过程及游标》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Oracle的存储过程及游标Oracle中的存储过程和游标:selectmyFunc(参数1,参数2..)todual;--可以执行一些业务逻辑一:Oracle中的函数与存储过程的区别:A:函数必须有返回值,而过程没有.B:函数可以单独执行.而过程必须通过execute执行.C:函数可以嵌入到SQL语句中执行.而过程不行.其实我们可以将比较复杂的查询写成函数.然后到存储过程中去调用这些函数.二:如何创建存储过程:A:格式createorreplaceprocedure[(参数名参数类型以及描述,....)]---注意,没有
2、返回值is[变量声明]begin[过程处理];----------null;exceptionwhen异常名thenend;注意:参数中默认是按值传递.是in方式.也可以是out和inout方式.这些特点和函数一样.B:举例1:createorreplaceproceduremyPro----createorreplaceprocmyPro出错不能简写(ainint:=0,binint:=0)iscint:=0;beginc:=a+b;dbms_output.put_line('Cisvalue'
3、
4、c);end;执行:executemyPro(10,2
5、0);---在SqlServer中.执行存储过程是不需要括弧的.注意分号不要调了.execmyPro(10,20);--可以简写C:举例2:如果在一个函数里面包含Select语句的话,那么该Select语句必须有into,过程同样也需要.createorreplaceproceduremyPro1(aint:=0,bint:=0)iscint:=0;beginselectempno+a+bintocfromempwhereename='FORD';dbms_output.put_line('Cisvalues'
6、
7、c);end;执行:executemyP
8、ro1(10,20)D:假如在一个过程里面要返回一个结果集,怎么办?大家注意.就必须要用到游标了!用游标来处理这个结果集.createorreplaceprocedureTest(varEmpNameemp.ename%type)isbegin------会报错.错误原因没有into子句.select*fromempwhereenamelike'%'
9、
10、varEmpName
11、
12、'%';end;这个程序我们无法用into,因为在Oracle里面没有一个类型去接受一个结果集.这个时候我们可以声明游标对象去接受他.PL/SQL游标:A:分类:1:隐式游标:非用
13、户明确声明而产生的游标.你根本看不到cursor这个关键字.2:显示游标:用户明确通过cursor关键字来声明的游标.B:什么是隐式游标:1:什么时候产生:会在执行任何合法的SQL语句(DML---INSERTUPDATEDELETEDQL-----SELECT)中产生.他不一定存放数据.也有可能存放记录集所影响的行数.如果执行SELECT语句,这个时候游标会存放数据.如果执行INSERTUPDATEDELETE会存放记录影响的行数.C:隐式游标叫什么名字:名字叫sql关于sql的游标变量到底有哪些呢?作用:返回最近一次执行SQL语句所涉及的游标相关信息
14、.因为每执行一次SQL语句,都会产生一个隐式游标.那么当前执行的SQL语句就是当前的隐式游标.sql%foundsql%notfoundsql%rowcountsql%isopenD:关于隐式游标的例子:createtable学生基本信息表(StuIDint,StuNamevarchar2(20))altertable学生基本信息表addconstraintPK_STUIDprimarykey(StuID)declarenumint:=0;beginnum:=#deletefrom学生基本信息表whereStuID=num;ifsql%notfo
15、undthendbms_output.put_line('该行数据没有发现');elsedbms_output.put_line('数据被发现并删除,影响的行数为:'
16、
17、sql%rowcount);endif;end;E:关于显示游标的例子:1:如何定义显示游标declarecursoris[select语句];declarecursormycurisselectempno,ename,jobfromscott.emp;2:如何打开游标:open;openmycur;3:如何通过游标来读取数据fetch
18、into4:如何关闭游标