有几种方法可以判断一条命令的效果。第一种方法是使用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影响的行数。
程序代码如下。
程序运行结果如下。
GET DIAGNOSTICS命令检索当前执行状态的信息(GET STACKED DIAGNOSTICS命令会把执行状态的信息报告成一个以前的错误)。它的SYS_CONTEXT状态项可用于标识当前执行位置。状态项SYS_CONTEXT将返回一个文本字符串,其中有描述该调用栈的多行文本。第一行会指向当前函数以及当前正在执行GET DIAGNOSTICS的命令。第二行及其后的行表示调用栈中更上层的调用函数。
示例2.19: 获取执行位置信息。
程序代码如下。
程序运行结果如下。