2013-02-04 25 views
16

Being vẫn còn là một newbie trong PL/SQL, tôi đã sao chép và dán xung quanh kích hoạt sau:Có phải 'NGOẠI TRỪ KHI NHỮNG NGƯỜI KHÁC NÀO RA' làm điều gì đó không?

CREATE OR REPLACE TRIGGER FOO_TRG1 
    BEFORE INSERT 
    ON FOO 
    REFERENCING NEW AS NEW OLD AS OLD 
    FOR EACH ROW 
BEGIN 
    IF :NEW.FOO_ID IS NULL THEN 
     SELECT FOO_SEQ1.NEXTVAL INTO :NEW.FOO_ID FROM DUAL; 
    END IF; 

    EXCEPTION 
     WHEN OTHERS THEN RAISE; 
END FOO_TRG1; 
/
ALTER TRIGGER FOO_TRG1 ENABLE; 

tôi nghi ngờ rằng mã xử lý ngoại lệ bao gồm làm gì cả và chỉ đơn giản là có thể bị loại bỏ, kể từ khi tôi sẽ nhận được một thông báo lỗi anyway nếu có điều gì sai. Tôi có đúng không?

(tôi đoán mã như vậy là kết quả của chỉnh sửa thêm đang trước.)

Trả lời

28

có, ngoại lệ mà không làm gì nhưng tăng lỗi tương tự ra. nó cũng phục vụ để che giấu số dòng thực của lỗi. Tôi sẽ xóa nó nếu tôi là bạn.

ví dụ:

SQL> declare 
    2 v number; 
    3 begin 
    4 select 1 into v from dual; 
    5 select 'a' into v from dual; 
    6 exception 
    7 when others 
    8 then 
    9  raise; 
10 end; 
11/
declare 
* 
ERROR at line 1: 
ORA-06502: PL/SQL: numeric or value error: character to number conversion error 
ORA-06512: at line 9 

vs:

SQL> declare 
    2 v number; 
    3 begin 
    4 select 1 into v from dual; 
    5 select 'a' into v from dual; 
    6 end; 
    7/
declare 
* 
ERROR at line 1: 
ORA-06502: PL/SQL: numeric or value error: character to number conversion error 
ORA-06512: at line 5 

số dòng trong một đầu tiên được trỏ đến các tăng thay vì số dòng sản. nó có thể làm cho việc theo dõi lỗi trở nên khó khăn hơn.

0

Nó không chỉ làm gì cả, nó là verging về tội phạm. Về cơ bản nó nói "Chỉ để cho vui, tôi sẽ giả vờ rằng lỗi xảy ra ở dòng này chứ không phải là dòng thực."

Xử lý ngoại lệ là khía cạnh bị hiểu lầm nhiều nhất của toàn bộ ngôn ngữ. Ở trên là rất phổ biến, và tôi nghĩ rằng nó xuất phát từ quan niệm sai lầm cơ bản rằng một 'ngoại lệ chưa được giải quyết' là một điều xấu (nó gần như cầu xin câu hỏi - tại sao bạn không xử lý nó?). Nếu chỉ Oracle đã sử dụng thuật ngữ 'ngoại lệ xảy ra' hoặc 'ngoại lệ gặp phải', chúng tôi những người nghèo, những người phải hỗ trợ mã này sẽ có ít hơn rất nhiều 'WHEN KHÁC' xử lý ngoại lệ làm cho cuộc sống của chúng tôi khốn khổ.

Các vấn đề liên quan