购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.6 获取执行状态信息

2.6.1 获取结果状态和执行位置信息

1.获取结果状态

有几种方法可以判断一条命令的效果。第一种方法是使用GET DIAGNOSTICS命令,其语法格式如下。

该命令允许检索系统状态指示符。每个item是一个关键字,它标识一个被赋予指定变量的状态值(变量应具有正确的数据类型来接收状态值)。表2.1展示了当前可用的状态项。

表2.1 可用结果状态项

第二种判断命令效果的方法是检查一个名为FOUND的boolean类型的特殊变量。在每一次PL/SQL函数调用时,FOUND开始都为false。它的值会被下面的每一种类型的语句设置。

①如果一个SELECT INTO语句赋值了一行,它将把FOUND设置为true,如果没有返回行,则将其设置为false。

②如果一个PERFORM语句生成(或者抛弃)一行或多行,它将把FOUND设置为true,如果没有产生行,则将其设置为false。

③如果UPDATE、INSERT以及DELETE语句影响了至少一行,它们会把FOUND设置为true,如果没有影响行,则将其设置为false。

④如果一个FETCH语句返回了一行,它将把FOUND设置为true,如果没有返回行,则将其设置为false。

⑤如果一个MOVE语句成功地重定位了游标,它将会把FOUND设置为true,否则设置为false。

⑥如果一个FOR或FOREACH语句迭代了一次或多次,它将会把FOUND设置为true,否则设置为false。当循环退出时,FOUND用这种方式设置;在循环执行中,尽管FOUND可能被循环体中其他语句的执行所改变,但它不会被循环语句修改。

⑦如果查询返回至少一行,RETURN QUERY和RETURN QUERY EXECUTE语句会把FOUND设为true,如果没有返回行,则设置为false。

其他的PL/SQL语句不会改变FOUND的状态。尤其需要注意的是:EXECUTE会修改GET DIAGNOSTICS的输出,但不会修改FOUND的输出。FOUND是每个PL/SQL函数的局部变量;任何对它的修改只影响当前的函数。

示例2.18: 获取动态SQL影响的行数。

程序代码如下。

程序运行结果如下。

2.获取执行位置信息

GET DIAGNOSTICS命令检索当前执行状态的信息(GET STACKED DIAGNOSTICS命令会把执行状态的信息报告成一个以前的错误)。它的SYS_CONTEXT状态项可用于标识当前执行位置。状态项SYS_CONTEXT将返回一个文本字符串,其中有描述该调用栈的多行文本。第一行会指向当前函数以及当前正在执行GET DIAGNOSTICS的命令。第二行及其后的行表示调用栈中更上层的调用函数。

示例2.19: 获取执行位置信息。

程序代码如下。

程序运行结果如下。 vmI35wfQgo+zMUut9HXkvZ/Bn1rgG6fh9LQ1AjrAy9Du4fAepuZ1bpS+VJkfhkDu

点击中间区域
呼出菜单
上一章
目录
下一章
×