什么是when语句
在Oracle数据库中,when语句是一种用于处理异常的语句。当程序执行过程中出现异常时,程序会根据异常类型执行不同的操作,通过使用when语句,程序可以指定在遇到特定类型的异常时执行相应的操作。
when语句的语法
when语句的语法如下:
DECLARE
--变量定义
BEGIN
--语句块
EXCEPTION
WHEN exception_type THEN
--异常处理语句
END;
其中,exception_type是指异常的类型,可以是系统预定义的异常类型,也可以是自定义的异常类型。
在when语句中,还可以使用多个when子句来处理不同的异常类型。这些when子句是按照顺序依次检查的,直到找到匹配的异常类型为止。如果没有找到匹配的异常类型,那么程序会将异常传递给更高层的处理程序进行处理。
when语句的位置
在PL/SQL语言中,when语句可以出现在以下位置:
存储过程和存储函数体内部
触发器中的触发器体内部
包中的例外部分(exception section)
when语句的使用示例
下面的示例演示了如何使用when语句来处理除零异常:
DECLARE
dividend INTEGER := 10;
divisor INTEGER := 0;
result INTEGER;
BEGIN
result := dividend / divisor; --除零异常将被抛出
EXCEPTION
WHEN ZERO_DIVIDE THEN
DBMS_OUTPUT.PUT_LINE('异常:除数不能为0');
END;
在这个例子中,当divisor等于0时,程序执行result := dividend / divisor;这条语句时会抛出除零异常。这时,程序会跳转到EXCEPTION块中的第一个when语句,执行输出异常信息的语句,然后结束程序的执行。
使用多个when子句
下面的示例演示了如何使用多个when子句来处理不同的异常类型:
DECLARE
dividend INTEGER := 10;
divisor INTEGER := 0;
result INTEGER;
BEGIN
result := dividend / divisor; --除零异常将被抛出
EXCEPTION
WHEN ZERO_DIVIDE THEN
DBMS_OUTPUT.PUT_LINE('异常:除数不能为0');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('其他异常');
END;
在这个例子中,当程序执行result := dividend / divisor;这条语句时会抛出除零异常。这时,程序会跳转到EXCEPTION块中的第一个when语句,执行输出异常信息的语句,然后结束程序的执行。如果程序抛出其他类型的异常而不是除零异常,那么程序会跳转到第二个when语句,执行输出“其他异常”的语句。
使用自定义异常类型
在PL/SQL中,我们可以使用RAISE
语句来抛出自定义的异常,进而在when语句中处理这些异常。
下面的示例演示了如何使用自定义异常类型:
DECLARE
--定义自定义异常类型
ex_my_exception EXCEPTION;
PRAGMA EXCEPTION_INIT (ex_my_exception, -20001); --为异常类型分配错误码
BEGIN
--触发自定义异常
RAISE ex_my_exception;
EXCEPTION
WHEN ex_my_exception THEN
DBMS_OUTPUT.PUT_LINE('自定义异常:错误代码为-20001');
END;
在这个例子中,我们定义了一个名为ex_my_exception
的自定义异常类型,并为这个异常类型分配了-20001错误代码。然后,我们在程序中使用RAISE
语句触发了这个异常。当程序执行到这个语句时,程序会跳转到EXCEPTION块中的when语句,执行输出异常信息的语句,然后结束程序的执行。
总结
当程序执行过程中出现异常时,通过使用when语句,我们可以指示程序在遇到特定类型的异常时执行特定的操作。在PL/SQL语言中,when语句可以出现在存储过程、存储函数、触发器以及包等部分中。通过可以多个when子句来处理不同类型的异常,还可以使用RAISE
语句来抛出自定义异常,然后在when语句中处理这些异常。