Oracle数据库游标管理PPT课件_第1页
Oracle数据库游标管理PPT课件_第2页
Oracle数据库游标管理PPT课件_第3页
Oracle数据库游标管理PPT课件_第4页
Oracle数据库游标管理PPT课件_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

游标管理,2,回顾,PL/SQL是一种可移植的高性能事务处理语言PL/SQL引擎驻留在Oracle服务器中PL/SQL块由声明部分、可执行部分和异常处理部分组成PL/SQL支持的数据类型包括标量数据类型、LOB数据类型和属性类型控制结构包括条件控制、循环控制和顺序控制PL/SQL支持动态SQL运行时出现的错误叫做异常异常可以分为预定义异常和用户定义的异常,3,目标,掌握游标管理技巧,4,游标简介2-1,执行PL/SQL程序,内存单元,保存到游标中,一次处理一行,检索行,提取行,5,游标简介2-2,逐行处理查询结果,以编程的方式访问数据游标的类型:,隐式游标,REF游标,显式游标,在PL/SQL程序中执行DMLSQL语句时自动创建隐式游标。,显式游标用于处理返回多行的查询。,REF游标用于处理运行时才能确定的动态SQL查询的结果,游标类型,6,隐式游标4-1,在PL/SQL中使用DML语句时自动创建隐式游标隐式游标自动声明、打开和关闭,其名为SQL通过检查隐式游标的属性可以获得最近执行的DML语句的信息隐式游标的属性有:%FOUNDSQL语句影响了一行或多行时为TRUE%NOTFOUNDSQL语句没有影响任何行时为TRUE%ROWCOUNTSQL语句影响的行数%ISOPEN-游标是否打开,始终为FALSE,7,隐式游标4-2,SQLSETSERVEROUTPUTONSQLBEGINUPDATEtoysSETtoyprice=270WHEREtoyid=P005;IFSQL%FOUNDTHENDBMS_OUTPUT.PUT_LINE(表已更新);ENDIF;END;/,只有在DML语句影响一行或多行时,才返回True,8,隐式游标4-3,SQLSETSERVEROUTPUTONSQLDECLAREv_TOYIDTOYS.ID%type:=/,如果DML语句不影响任何行,则返回True,9,隐式游标4-4,SQLSETSERVEROUTPUTONSQLBEGINUPDATEvendor_masterSETvenname=RobMathewWHEREvencode=V004;DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT);END;/,返回DML语句影响的行数,10,SELECTINTO语句2-1,SQLSETSERVEROUTPUTONSQLDECLAREempidVARCHAR2(10);desigVARCHAR2(10);BEGINempid:=/,如果没有与SELECTINTO语句中的条件匹配的行,将引发NO_DATA_FOUND异常,11,SELECTINTO语句2-2,SQLSETSERVEROUTPUTONSQLDECLAREempidVARCHAR2(10);BEGINSELECTempnoINTOempidFROMemployee;EXCEPTIONWHENTOO_MANY_ROWSTHENDBMS_OUTPUT.PUT_LINE(该查询提取多行);END;/,如果SELECTINTO语句返回多个值,将引发TOO_MANY_ROWS异常,12,显式游标2-1,显式游标在PL/SQL块的声明部分定义查询,该查询可以返回多行显式游标的操作过程:,数据库,打开游标,提取行,变量,关闭游标,13,显式游标2-2,SQLSETSERVEROUTPUTONSQLDECLAREmy_toy_pricetoys.toyprice%TYPE;CURSORtoy_curISSELECTtoypriceFROMtoysWHEREtoypriceSETSERVEROUTPUTONSQLDECLAREdesigVARCHAR2(20);emp_codeVARCHAR2(5);empnmVARCHAR2(20);CURSORemp_cur(desigparamVARCHAR2)ISSELECTempno,enameFROMemployeeWHEREdesignation=desig;BEGINdesig:=,15,使用显式游标更新行2-1,允许使用游标删除或更新活动集中的行声明游标时必须使用SELECTFORUPDATE语句CURSORISSELECTstatementFORUPDATE;UPDATESETWHERECURRENTOF,更新的语法,DELETEFROMWHERECURRENTOF,删除的语法,16,使用显式游标更新行2-2,SQLSETSERVEROUTPUTONSQLDECLAREnew_priceNUMBER;CURSORcur_toyISSELECTtoypriceFROMtoysWHEREtoypriceSETSERVEROUTPUTONSQLDECLARECURSORmytoy_curISSELECTtoyid,toyname,toypriceFROMtoys;BEGINFORtoy_recINmytoy_curLOOPDBMS_OUTPUT.PUT_LINE(玩具编号:|toy_rec.toyid|玩具名称:|toy_rec.toyname|玩具单价:|toy_rec.toyprice);ENDLOOP;END;,19,REF游标和游标变量3-1,REF游标和游标变量用于处理运行时动态执行的SQL查询创建游标变量需要两个步骤:声明REF游标类型声明REF游标类型的变量用于声明REF游标类型的语法为:TYPEISREFCURSORRETURN;,20,REF游标和游标变量3-2,TYPEmy_curtypeISREFCURSORRETURNstud_det%ROWTYPE;order_curmy_curtype;,声明强类型的REF游标,打开游标变量的语法如下:OPENcursor_nameFORselect_statement;,TYPEmy_ctypeISREFCURSOR;stud_curmy_ctype;,声明弱类型的REF游标,21,REF游标和游标变量3-3,SQLDECLARETYPEtoys_curtypeISREFCURSORRETURNtoys%ROWTYPE;toys_curvartoys_curtype;toys_rectoys%ROWTYPE;BEGINOPENtoys_curvarFORSELECT*FROMtoys;FETCHtoys_curvarINTOtoys_rec;.CLOSEtoys_curvar;END;,声明REF游标类型,声明游标变量,22,游标变量的优点和限制,游标变量的功能强大,可以简化数据处理。游标变量的优点有:可从不同的SELECT语句中提取结果集可以作为过程的参数进行传递可以引用游标的所有属性可以进行赋值运算使用游标变量的限制:不能在程序包中声明游标变量FORUPDATE子句不能与游标变量一起使用不能使用比较运算符,23,使用游标变量执行动态SQL,可以使用游标变量执行动态构造的SQL语句打开执行动态SQL的游标变量的语如下:OPENcursor_nameFORdynamic_sqlstringUSINGbind_argument_list;,DECLAREr_empemp%ROWTYPE;TYPEc_typeISREFCURSOR;curc_type;p_salaryNUMBER;BEGINp_salary:=2500;OPENcurFORselect*fromempwheresal:1orderbysaldescUSINGp_salary;DBMS_OUTPUT.PUT_LINE(薪水大于|p_salary|的员工有:);LOOPFETCHcurINTOr_emp;EXITWHENcur%NOTFOUND;DBMS_OUTPUT.PUT_LINE(编号:|r_emp.empno|姓名:|r_emp.ename|薪水:|r_em

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论