Oracle Database 10g PL/SQL Programming - PL/SQL块之嵌套块异常处理规则
来源:互联网 发布:淘宝店主拍摄现场 编辑:程序博客网 时间:2024/05/29 04:31
PL/SQL块中还可以包含其他子块,即嵌套,在代码块的异常处理部分和执行部分都允许在嵌套块,但是在声明部分不允许存在嵌套块。
让我们来研究下下面的这个例子,创建一个带有两个嵌套块的匿名块,且这两个嵌套块是在同一个嵌套层次上。
DECLARE
v_neusoft AUTHORS.FIRST_NAME%TYPE;
BEGIN
-- the first nested block
BEGIN
SELECT first_name
INTO v_neusoft
FROM authors
WHERE UPPER(last_name) = 'NIMENG';
EXCEPTION
WHEN NO_DATA_FOUND
THEN
DBMS_OUTPUT.PUT_LINE('EXCEPTION HANDLER for nested block 1');
DBMS_OUTPUT.PUT_LINE(' ');
NULL;
END;
-- the second nested block
BEGIN
SELECT first_name
INTO v_neusoft
FROM authors
WHERE UPPER(last_name) = 'HARDMAN';
EXCEPTION
WHEN TOO_MANY_ROWS
THEN
DBMS_OUTPUT.PUT_LINE(' ');
DBMS_OUTPUT.PUT_LINE('EXCEPTION HANDLER for nested block 2');
END;
END;
让我们从这里例子中来理解嵌套块的使用,以及嵌套块异常处理的规则。
两个嵌套块都有异常,而且都有异常处理子程序。在第一个嵌套块中,我们检索不到任何数据,由于检索的值为NULL,因此引发ORA-1403 no data found 异常,这里我们使用内置NO_DATA_FOUND异常,只要发生ORA-1403 no data found 异常,我们就可以捕获它。在第二个嵌套块中,我们检索出多条数据,导致发生 too many rows 异常,这里我们依然使用内置异常 TOO_MANY_ROWS来捕获它。
执行结果,打印出了:
EXCEPTION HANDLER for nested block 1
EXCEPTION HANDLER for nested block 2
从执行结果中,我们发现了什么?这里发生了一个很有趣的现象,第一个嵌套块中查询语句发生了异常,第二个嵌套块中的查询语句依然执行。而如果这两条查询语句是在同一个大块中,而不是在两个嵌套块中,执行结果是什么?读者你可能猜的到?
执行结果,打印出了:
EXCEPTION HANDLER for nested block 1
这说明,如果两条查询语句是在同一个大块中,而不是在两个嵌套块中,第一个查询语句发生的异常,使所有其余代码都不能执行。
亲爱的的读者,通过这个例子,您可掌握了嵌套块的使用,以及异常处理的规则?
读者还要注意第一个嵌套块中的异常处理部分以NULL结尾,表示下面要忽略这里薄面的一擦和那个,ORACLE就会像什么异常都没有发生过一样,继续处理第二条查询语句了。
希望能对您有用!
- Oracle Database 10g PL/SQL Programming - PL/SQL块之嵌套块异常处理规则
- Oracle Database 10g PL/SQL Programming - PL/SQL块之简单应用
- Oracle Database 10g PL/SQL Programming - PL/SQL块之触发器简单应用
- Oracle Database 10g PL/SQL Programming -名词所有格处理
- Oracle Database 11g PL/SQL Programming
- Oracle pl/sql块
- Oracle PL/SQL块
- Oracle PL/SQL块
- /*Oracle PL/SQL 块*/
- [Oracle PL SQL]PL/SQL块书写
- ORACLE 匿名PL/SQL块
- PL/SQL块结构
- PL/SQL程序块
- 典型pl/sql块
- PL/SQL 块简介
- PL/SQL块结构
- PL/SQL块 基础
- pl/sql代码块
- 番茄花园/ghostxp等XP系统不能文件和打印机共享还有魔兽不能建主机的解决办法
- 怎样成为优秀的软件模型设计者
- 寻求查找两组数组相同的元素的较好方法
- Resin 的watchdog(看门狗)介绍和resin负载均衡实现
- 下载eclipse for oepe版本
- Oracle Database 10g PL/SQL Programming - PL/SQL块之嵌套块异常处理规则
- 学习使用flex
- js类
- 关于Hadoop in China 2009大会视频与ppt
- SD卡家族纵览(SD miniSD microSD SDIO)
- 柱状图(Histogram),绑定变量,bind peeking,cursor_sharing 之间的关系1 柱状图
- jsp中超级链接中的传递参数不能是中文
- 在Ubuntu Linux上安装Java和Eclipse
- 读《冒号课堂》