2012-09-21 9 views
12

में एक प्रक्रिया में जैसा पकड़ने, मैं कोई प्रभाव नहीं पड़ेगा अगर यह विफल रहता है, पर अमल तर्क इकाई 2कोशिश एक्सेप्शन हैंडलिंग PL/SQL

इस एक ठेठ कोशिश पकड़ परिदृश्य की तरह लगता है तर्क इकाई 1 क्या करना चाहते हैं,। लेकिन मैं इसे pl/sql में कैसे कर सकता हूं?

create or replace 
PACKAGE BUILD_PKG 
AS 
PROCEDURE reset_seq_and_truncate_tbl(
    p_seq_name IN VARCHAR2, 
    p_table_name IN VARCHAR2); 
END BUILD_PKG; 
/
create or replace 
PACKAGE BODY BUILD_PKG 
AS 
BEGIN 
PROCEDURE reset_seq_and_truncate_tbl(
    p_seq_name IN VARCHAR2, 
    p_table_name IN VARCHAR2) 
IS 
    l_val NUMBER; 
BEGIN 
    BEGIN 
    EXECUTE immediate 'truncate table ' || p_table_name; 
    EXCEPTION 
     WHEN OTHERS 
     THEN dbms_output.put_line(SQLCODE); 
    END; 

    BEGIN 
    EXECUTE immediate 'alter sequence ' || p_seq_name || ' increment by 1 minvalue 0'; 
    EXCEPTION 
     WHEN OTHERS 
     THEN dbms_output.put_line(SQLCODE); 
    END; 
END reset_seq_and_truncate_tbl; 

END BUILD_PKG; 

जैसा कि आप दूसरे अपवाद ब्लॉक को समस्या का कारण देख सकते हैं।

उत्तर

16

BEGIN..END ब्लॉक में दूसरे EXCEPTION संलग्न करें। इस तरह से टिप्पणी के जवाब में

PROCEDURE reset_seq_and_truncate_tbl(
    p_seq_name IN VARCHAR2, 
    p_table_name IN VARCHAR2) 
IS 
    l_val NUMBER; 
BEGIN 
    EXECUTE immediate 'truncate table ' || p_table_name; 
EXCEPTION 
     WHEN OTHERS 
     THEN 
     BEGIN 
     dbms_output.put_line(SQLCODE); 
     EXECUTE immediate 'alter sequence ' || p_seq_name || ' increment by 1 minvalue 0'; 
     --this would cause compilation error 
     EXCEPTION 
      WHEN OTHERS 
      THEN dbms_output.put_line(SQLCODE); 
    END; 
END reset_seq_and_truncate_tbl; 

अद्यतन प्रयास करें

PROCEDURE reset_seq_and_truncate_tbl(
    p_seq_name IN VARCHAR2, 
    p_table_name IN VARCHAR2) 
IS 
    l_val NUMBER; 
BEGIN 
    BEGIN 
    EXECUTE immediate 'truncate table ' || p_table_name; 
    EXCEPTION 
     WHEN OTHERS 
     THEN dbms_output.put_line(SQLCODE); 
    END; 

    BEGIN 
    EXECUTE immediate 'alter sequence ' || p_seq_name || ' increment by 1 minvalue 0'; 
    EXCEPTION 
     WHEN OTHERS 
     THEN dbms_output.put_line(SQLCODE); 
    END; 
END reset_seq_and_truncate_tbl; 
+0

मेरे उत्तर के लिए लगभग सटीक। मैं अपना मिटा दूंगा। –

+0

क्षमा करें, मुझे इसे और स्पष्ट करना चाहिए था। तर्क 1 निष्पादित करें, इससे कोई फर्क नहीं पड़ता कि यह विफल रहता है, तर्क 2 निष्पादित करें –

+0

दूसरे दृष्टिकोण पर एक नज़र डालें –

1

प्रक्रिया ( ) है

शुरू

- तार्किक Unit1 शुरू ... अपवाद जब अन्य THEN ... अंत;

- तार्किक Unit2 शुरू ... अपवाद जब दूसरे फिर ... अंत;

- अंतिम अपवाद ब्लॉक अपवाद जब दूसरे फिर ...

अंत;

संबंधित मुद्दे