沒有,也不會進入異常。 MAX不會提高no_data_found因爲它會返回NULL值。
看到這個:
SQL> select max(a_id) from table_a;
MAX(A_ID)
----------
SQL> select a_id from table_a;
no rows selected
SQL>
沒有任何其他選擇,以計數(),然後所獲得的價值只有數()> 0
你可以有你自定義異常然後擡起它當值爲NULL。
例如,
SQL> CREATE TABLE table_A(a_id NUMBER);
Table created.
SQL> SET SERVEROUTPUT ON
SQL> DECLARE
2 id_variable NUMBER;
3 is_null EXCEPTION;
4 BEGIN
5 SELECT MAX(A_id) + 1 INTO id_variable FROM table_A;
6 IF id_variable IS NULL THEN
7 raise is_null;
8 END IF;
9 EXCEPTION
10 WHEN is_null THEN
11 DBMS_OUTPUT.PUT_LINE('Came into Exception');
12 END;
13/
Came into Exception
PL/SQL procedure successfully completed.
SQL>
更新如果你不想拋出異常,只是想從另一個表選擇時MAX返回NULL,然後添加一個IF-ELSE
塊。
例如,
SQL> CREATE TABLE table_A(a_id NUMBER);
Table created.
SQL> CREATE TABLE table_b(a_id NUMBER);
Table created.
SQL> INSERT INTO table_b VALUES(1);
1 row created.
SQL> COMMIT;
Commit complete.
SQL> SET SERVEROUTPUT ON
SQL> DECLARE
2 id_variable NUMBER;
3 BEGIN
4 SELECT max(A_id) + 1 INTO id_variable from table_A;
5 IF id_variable IS NULL
6 THEN
7 SELECT A_id + 1 INTO id_variable FROM table_b;
8 END IF;
9 DBMS_OUTPUT.PUT_LINE('ID value is '||id_variable);
10 END;
11/
ID value is 2
PL/SQL procedure successfully completed.
爲什麼不選中null? –
你是說添加空檢查在哪裏條款 – kpvsrkp
添加OTHERS關鍵字和相同的邏輯到異常處理和我完成 – Thomas