网站大量收购独家精品文档,联系QQ:2885784924

.httpjsjsicteducnjpkcoraclezwkjqj3PL_SQL总结-3ppt.ppt

  1. 1、本文档共82页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
httpjsjsicteducnjpkcoraclezwkjqj3PL_SQL总结-3ppt

复习变量作用域 变量作用域是变量在其中可被访问和使用的一个块或多个块. PL/SQL中,变量作用域是其定义所在块及其所有子块. 下例两个变量的作用域是什么? 复习变量作用域 阅读下面代码. 每个变量的作用域是什么? 复习变量作用域 下面代码为什么出错? 复习变量作用域 下面代码正确吗? 为什么? PL/SQL 怎样寻找变量? 在块中使用变量时, PL/SQL 先在当前块中寻找该变量 (局部变量). 如果未找到, PL/SQL 继续在父块中寻找. 如果还未找到, PL/SQL 在父块的父块中寻找(嵌套可有三层或更多层). 依此类推. 下例中有三层嵌套. 三层嵌套示例 每个变量的作用域是什么? 复习变量命名 下面变量声明对不对? 以上声明合法,但在子块中无法访问父块定义的变量 v_myvar. 复习变量命名 变量 v_date_of_birth 声明了两次. DBMS_OUTPUT.PUT_LINE 语句中引用的是哪个 v_date_of_birth ? 复习变量可见范围 变量可见范围是变量作用域中,不加限定符就可使用变量的部分. 下面每个变量的可见范围是什么? 复习变量可见范围 父块的 v_date_of_birth 变量作用域包括子块. 此变量在父块中可见. 然而,该变量在子块中不可见(被隐藏) ,因为子块中有一个同名的局部变量. 变量 v_father_name 在父子块中都可见. 变量 v_child_name 只在子块中可见. 怎样才能在子块中引用父块定义的变量 v_date_of_birth 呢? 复习块标签 可使用 … 语法为块加标签. 然后通过标签使用在作用域内但被隐藏的变量. 下例中, 父块标签为outer. 不仅父块,任何块都可加标签. 通过块标签使用被隐藏变量 通过使用标签 outer 限定变量 v_date_of_birth, 在子块中就可输出显示父亲的生日了. 嵌套块中的异常处理 异常处理方式有两种: 在发生异常的块处理 (捕获) 该异常 将异常传递给调用环境 (比如其父块) 传播异常到父块 如果异常自子块的执行部分抛出,子块无相应处理代码, PL/SQL 子块以失败结束, 异常传递给其父块. 传播异常到父块 下例中, 子块执行时产生了一个异常. 子块 EXCEPTION 部分 没有处理此异常. 子块失败结束, PL/SQL 将异常传递给父块. 父块 EXCEPTION 部分成功处理此异常. 从子块向外传递异常 如果 PL/SQL 产生异常,而当前块没有捕获该异常 异常连续传递给上层块,直到找到相应异常处理程序. 异常传递给上层块时,当前块剩余执行代码被跳过,不再执行. 这样做的优点是在块中处理此块可以处理的异常, 将更一般的异常处理 (如 WHEN OTHERS)交给上层块去. 下面是一个例子. 从子块向外传递预定义异常 不存在编号 999 的员工. 下面代码执行结果是什么? 从子块向外传递用户定义的异常 下面代码执行结果怎样? 异常名的作用域 预定义 Oracle 服务异常如 NO_DATA_FOUND, TOO_MANY_ROWS (以及 OTHERS) 不需要用户声明. 可在任何块中使用(抛出或捕获). 用户命名的异常 (非预定义 Oracle 服务异常和 自定义异常)是程序员定义的 EXCEPTION 类型的变量 其作用域和其它变量遵循相同规则. 因此, 子块声明的自定义异常不能在父块中使用 识别变量作用域 此部分讲解了: 描述在嵌套块中变量的作用域. 使用标签限定嵌套块中的变量 描述异常的作用域 识别嵌套块中异常的作用域问题 描述异常在嵌套块中的传播方式及其影响 捕获多个预定义Oracle 服务错误 下例处理了 TOO_MANY_ROWS 和 NO_DATA_FOUND 异常, 并使用 OTHERS 来处理其它可能的异常. DECLARE v_lname VARCHAR2(15); BEGIN SELECT last_name INTO v_lname FROM employees WHERE first_name = John; DBMS_OUTPUT.PUT_LINE(Johns last name is : || v_lname); EXCEPTION WHEN TOO_MANY_ROWS THEN DBMS_OUTPUT.PUT_LINE(Select statement found multiple rows); WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE(Select stat

文档评论(0)

ranfand + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档