PLSQL入门于精通(第15章:键值数组的键值存在性检查)

这次就标号数组(或者叫键值数组)的键的是否存在的检查,进行说明。

标号数组可以新增加键,并给予赋值,同时将该键的区域分配给存储器。
也就是说,通过新增加键值,可以轻松扩展领域保存数值。

那么,用新的键代入来扩展区域的话,如果使用不存在的的键,会发生错误。
例子:

<使用不存在的键访问而导致错误的示例>

SQL> connect scott/tiger
已连接。
SQL> SET SERVEROUTPUT ON
SQL> DECLARE
2 TYPE A_TYPE IS TABLE OF VARCHAR2(100) INDEX BY BINARY_INTEGER;
3 A A_TYPE;
4 BEGIN
5A(1):=‘一’;
6A(3):=‘3’;
7 DBMS_OUTPUT.PUT_LINE(A(2));
8 END;
9 /

DECLARE
行1发生错误。:
ORA-01403:找不到数据。
ORA-06612:行7

在这里,键值1和键值3分别用键值1和键值3代入键值数组A中,对应的键值分别是“1”和“3”。(第5-6行)
因此,键值2不存在,但使用了(第7行),结果出错:“ORA-01403:找不到数据”

“ORA-01403:找不到数据。”这样的错误和SELECT INTO语句为0件时的错误相同,
可以以NO DATA FOUND异常(或者叫做例外)处理例外。
例子如下:

<对不存在的键的错误进行例外处理的示例>
SQL> DECLARE
2 TYPE A_TYPE IS TABLE OF VARCHAR2(100) INDEX BY BINARY_INTEGER;
3 A A_TYPE;
4 BEGIN
5A(1):=‘一’;
6A(3):=‘3’;
7 DBMS_OUTPUT.PUT_LINE(A(2));
8 EXCEPTION
9 WHEN NO_DATA_FOUND THEN
10 DBMS_OUTPUT.PUT_LINE(“引用了不存在的键值”);
11 END;
12 /

引用了不存在的键值
PL/SQL过程成功完成。

与刚才的例子不同的是,追加了8-10行。

这里,由于NO DATA FOUND例外处理程序,对于参照了不存在的键值时的错误,显示“参照了不存在的键值”的信息,使之“正常完成”。

但是,这样的话,只不过是因为发生了错误才进行例外处理并正常完成的。

这是发生错误的时候才判断,应该在发生错误之前进行错误判断才合理。

例子如下:

<事先检查键值的存在的示例>
SQL> DECLARE
2 TYPE A_TYPE IS TABLE OF VARCHAR2(100) INDEX BY BINARY_INTEGER;
3 A A_TYPE;
4 BEGIN
5A(1):=‘一’;
6A(3):=‘3’;
7 IF A.EXISTS(2) THEN
8 DBMS_OUTPUT.PUT_LINE(A(2));
9 ELSE
10 DBMS_OUTPUT.PUT_LINE(“键值2不存在”);
11 END IF;
12 END;
13 /

键值2不存在

PL/SQL过程成功完成。

这里,要点是第7行的记述。
A.EXISTS(2)的记述是如果键值2存在于键值数组A中,则返回TRUE,如果不存在,则返回FALSE,结果这次执行了ELSE以下第10行的代码,显示了“键值2不存在”这样的信息。

这样,我们就可以在引用键值数组之前可以检查其键值的存在,防止以不存在的键值引用错误。

另外,这个“EXISTS”是组合排列的方法之一。

本章到此为止,谢谢。

猜你喜欢

转载自blog.csdn.net/niusr_1980_01/article/details/114162101