117.Oracle数据库SQL开发之 PLSQL编程——异常

275 阅读1分钟

117.Oracle数据库SQL开发之 PLSQL编程——异常

欢迎转载,转载请标明出处:blog.csdn.net/notbaron/ar…\

异常用于处理PL/SQL代码块中出现的运行时错误。

常见的异常如下:

1.  ZERO_DIVIDE 异常

ZERO_DIVIDE异常在试图用一个数字除以零的时候发生。

执行如下:

store@PDB1> BEGIN

   DBMS_OUTPUT.PUT_LINE(1/0);

    EXCEPTION

    WHENZERO_DIVIDE THEN

   DBMS_OUTPUT.PUT_LINE('Division by zero');

    END;

    /

Division by zero

 

PL/SQL procedure successfully completed.

当异常发生时,程序的控制权将转交给EXCEPTION块,其中的WHEN子句复制检查与何种异常相匹配,然后执行匹配子句中的代码。

2.  DUP_VAL_ON_INDEX异常

如果视图向具有唯一性索引约束的列中插入重复的值,就会引发DUP_VAL_ON_INDEX异常。

例如:

store@PDB1>BEGIN

    INSERT INTO customers(customer_id,first_name,last_name) values ( 1,'Greg','Green');

    EXCEPTION

    WHEN DUP_VAL_ON_INDEX THEN

    DBMS_OUTPUT.PUT_LINE('Duplicate value on anindex');

    END;

    /

Duplicate valueon an index

 

PL/SQL proceduresuccessfully completed.

3.  INVALID_NUMBER异常

当试图将无效的字符串转换成数字时,就会引发INVALID_NUMBER异常。

例如:

store@PDB1> BEGIN

    INSERT INTOcustomers ( customer_id,first_name,last_name) VALUES ('123x','Greg','Green');

    EXCEPTION

    WHENINVALID_NUMBER THEN

   DBMS_OUTPUT.PUT_LINE('Conversion of string to number failed');

    END;

    /

Conversion of string to number failed

 

PL/SQL procedure successfully completed.

4.  OTHERS异常

OTHERS异常可以处理所有异常。

例如:

store@PDB1> BEGIN

   DBMS_OUTPUT.PUT_LINE(1/0);

    EXCEPTION

    WHEN OTHERSTHEN

   DBMS_OUTPUT.PUT_LINE('An exception occurred');

    END;

    /

An exception occurred

 

PL/SQL procedure successfully completed.

因为OTHERS可处理所有的异常,因此必须在EXCEPTION块中所有特定的异常之后使用该异常。如果试图在其他地方使用OTHERS异常,数据库会返回错误PLS-00370。