基本信息
文件名称:《Oracle数据库管理与应用》第7章 PLSQL编程基础-教学课件(非AI生成).ppt
文件大小:433 KB
总页数:106 页
更新时间:2025-06-23
总字数:约2.42万字
文档摘要

如果在循环中不需要引用游标的名称,那么可以直接在游标FOR循环中使用子查询,由系统自动创建隐式游标。例7.38使用隐式游标的FOR循环查询emp表中的数据。BEGINFORemp_recordIN(SELECTename,salFROMemp)LOOP

dbms_output.put_line(emp_record.ename||||emp_record.sal);ENDLOOP;END;*7.7.4使用游标更新表中的数据可以使用游标在表中修改、删除数据。但是需要注意,若想通过游标修改或删除数据,那么在定义游标时必须要带有FORUPDATE子句。语法格式如下:CURSORcursor_name[(parameter_namedatatype)]ISselect_statementFORUPDATE[OFcolumn_reference][NOWAIT];*FORUPDATE子句用于在游标结果集数据上加行共享锁,以防止其他用户在相应行上执行DML操作。OF子句用来指定要锁定的列,忽略OF子句,那么表中选择的数据行都将被锁定。NOWAIT子句,表示,如果游标要修改的行被另一个用户的操作锁定,则OPEN会立即返回错误提示,不再等待。*为了修改或删除游标当前行数据,必须在UPDATE、DELETE语句中使用WHERECURRENTOF子句,表示修改或删除的记录是游标指向的当前记录。UPDATEtable_nameSETcolumn=new_valueWHERECURRENTOFcursor_name;DELETEtable_nameWHERECURRENTOFcursor_name;*例7.39使用显式游标查询scott.emp表中的记录,并将工资低于3000的工资增加为原来的百分之二十。DECLARECURSORemp_cursorISSELECTename,salFROMscott.empFORUPDATE;BEGINFORrecINemp_cursorLOOPIFrec.sal3000THENUPDATEscott.empSETsal=sal*(1+0.2)WHERECURRENTOFemp_cursor;ENDIF;ENDLOOP;COMMIT;EXCEPTIONWHENothersTHENROLLBACK;dbms_output.put_line(occurserrors!);END;*例7.40使用显式游标删除emp表中部门编号是30的记录。DECLARECURSORemp_cursorISSELECT*FROMempFORUPDATE;record_empemp%ROWTYPE;BEGINOPENemp_cursor;LOOPFETCHemp_cursorINTOrecord_emp;EXITWHENemp_cursor%NOTFOUND;IFrecord_emp.deptno=30THENDELETEFROMempWHERECURRENTOFemp_cursor;ENDIF;ENDLOOP;CLOSEemp_cursor;EXCEPTIONWHENothersTHENROLLBACK;dbms_output.put_line(occurserrors);END;*7.8异常处理异常是指在运行PL/SQL块时出现的错误或警告。异常分为两类:系统异常系统预定义异常非预定义异常用户自定义异常*7.8.2系统异常1.系统预定义异常由系统根据发生的错误已经定义好的异常,它们有错误编号和异常名称,用来处理常见的Oracle错误。常见的系统预定义异常包括:CASE_NOT_FOUND--CASE语句中缺少相应条件DUP_VAL_ON_INDEX--唯一索引的列上有重复值TOO_MANY_ROWS--返回的记录超过一行NO_DATA_FOUND--未找到满足条件的记录参见例题7.41~7.44*2.非预定义异常是指