2011-12-19 8 views
7

मैं एक कर्सर निष्पादित करने के लिए कोशिश कर रहा हूँ और यह पाश को पूरा करना चाहते हैं, भले ही वहाँ कुछ अपवाद नहीं है।plsql/कर्सर अपवाद को संभालने और वापस निष्पादन करने के लिए वापस प्रवाह

मैं क्या करने की कोशिश कर "पकड़" सभी अपवाद और probaably somthing प्रवेश करें या कुछ भी नहीं है और फिर वापस प्रवाह पर लौटने है। यहां बताया गया है कि कोड कैसा दिखता है:

FOR line IN my_cursor 
LOOP 
begin 

    if<condition> then 
     GOTO pass; 
    else  
    <<do_something>> 
    exception 
     when others then 
     sys.dbms_output.put_line('say something');  
    end if; 

    <<pass>> null; 
end 
END LOOP; 

स्क्रिप्ट संकलित नहीं करता है। शायद अपवाद के साथ कुछ वाक्य रचनात्मक त्रुटि है, लेकिन मुझे अर्थशास्त्र के बारे में भी जानकारी नहीं है। जैसे मुझे यकीन नहीं है कि क्या आप अपवाद को संभालने के बाद निष्पादन प्रवाह पर वापस लौट सकते हैं।

पी.एस: डीबी 10 ग्राम है और वहाँ उस में जारी नहीं किया गया है। इसलिए गोटो का उपयोग करना।

+2

, 'if' एक' then' और 'अंत if' की जरूरत है। –

+0

thnx। यह सवाल में एक टाइपो था। – codeObserver

+0

क्या आप जांच सकते हैं कि प्रस्तावित उत्तरों में से एक स्वीकार्य के रूप में योग्य हो सकता है? टीआईए – lkuty

उत्तर

16

कोड है कि आप अपने आप ब्लॉक में पाश के भीतर निष्पादित करने के लिए चाहते हैं रखो और फिर आप उपयोग कर सकते हैं कि ब्लॉक अपवाद अनुभाग पाश यात्रा के दौरान किसी भी समस्याओं को संभालने के लिए।

एक बार है कि यात्रा के लिए अपवाद नियंत्रित किया जाता है, अगले पाश यात्रा शुरू कर देंगे

जैसे:

for line in my_cursor 
loop 
    begin  
     <<do_something>> 
    exception 
     <<do_exception_processing>>   
    end; 
end loop; 

इस बेहतर तरीके से समझने के लिए, नीचे दिए गए उदाहरण में, मैं प्रकार की एक स्थानीय चर घोषणा की है अपवाद। मैं दूसरे लूप पुनरावृत्ति के दौरान संख्या 1 से 10 के माध्यम से लूपिंग कर रहा हूं, यदि कथन सत्य है और प्रसंस्करण अपवाद हैंडलर को पास करता है। एक बार अपवाद संभालने के बाद, लूप का अगला पुनरावृत्ति शुरू होता है।

begin 

    for i in 1 .. 10 
    loop 

     declare 

     my_exception exception; 

     begin 

     if i = 2 
     then 

      -- if you need to do some processing then you would enter it 
      -- here and then when you want to enter the exception section 
      -- you would add the line below 

      raise my_exception; 

     end if; 

     exception 
     when my_exception then 
      dbms_output.put_line('in exception section'); 

     end; 

    end loop; 

end; 
+1

थेंक्स इयान। मैंने कोशिश की और सवाल में अद्यतन किया। अभी भी समस्याएं हैं। क्या लूप में "शुरूआत" और "अंत" की आवश्यकता है? – codeObserver

+2

हाँ, क्रम अपवाद अनुभाग शुरू का उपयोग करने के .. अंत वर्गों –

+0

मैं एक उदाहरण –

7
FOR line IN my_cursor 
LOOP 
    if not some_condition then 
    begin 
     do_something; 
    exception  
     when others then log_my_error(); -- this should be something that uses 
             -- an autonomous transaction 
    end; 
    end if; 
END LOOP; 
0
BEGIN 
FOR Line in My_Cursor LOOP 
    IF condition THEN 
BEGIN 
    do something... 
END; 
    ELSE 
BEGIN 
    do something... 
END; 
    END IF; 
END LOOP; 
EXCEPTION 
WHEN OTHERS THEN 
DBMS_OUTPUT.PUT_LINE('say something'); 
END; 
इसके अलावा
संबंधित मुद्दे