2012-10-25 7 views
8

मैं सोच रहा हूं कि कोड का यह टुकड़ा क्यों काम नहीं कर रहा है। मेरे पास मेरी मेज में कोई सप्लायर आईडी = 1 नहीं है।pl sql% NOTFOUND

DECLARE 
    VAR SUPP_NM VARCHAR(100); 
    VAR_SUPP_ID NUMBER := 1; 
    WHILE_VAR CHAR := 'Y'; 
BEGIN 
    SELECT SUPP_NM 
    INTO VAR_SUPP_NM 
    FROM TEST.SUPPLIER 
    WHERE SUPP_ID = VAR_SUPP_ID; 

    IF SQL%NOTFOUND THEN 
     DBMS_OUTPUT.PUT_LINE('SQL DATA NOT FOUND'); 
    ELSIF SQL%FOUND THEN 
     DBMS_OUTPUT.PUT_LINE('DATA FOUND'); 
    END IF;  
END; 
+0

मैं मेंढक में एक 01403 त्रुटि मिलती है लेकिन एसक्यूएल% notfound..Why नहीं करता है 'के रूप में नहीं संभाला sqlnotfound काम कर रहा है – user1050619

+1

कृपया उस जानकारी को अपने प्रश्न में संपादित करें। (और हमेशा यह कहें कि क्या हो रहा है/भविष्य में सीधे आप जिस प्रश्न में पोस्ट कर रहे हैं, जब आप इसे पोस्ट करते हैं। यह वास्तव में महत्वपूर्ण है।) – Mat

उत्तर

13

को पकड़ने के लिए के रूप में exception खंड जोड़कर इस प्रकार NO_DATA_FOUND अपवाद अपने कोड को फिर से लिखने:

DECLARE 
    VAR_SUPP_NM VARCHAR2(100); 
    VAR_SUPP_ID NUMBER := 1; 
    WHILE_VAR CHAR := 'Y'; 
BEGIN 
    SELECT SUPP_NM 
    INTO VAR_SUPP_NM 
    FROM TEST.SUPPLIER 
    WHERE SUPP_ID = VAR_SUPP_ID; 

DBMS_OUTPUT.PUT_LINE('DATA FOUND'); 

exception 
    when no_data_found 
    then DBMS_OUTPUT.PUT_LINE('SQL DATA NOT FOUND'); 

END; 

जाँच हो रही है क्योंकि अगर चयन बयान नहीं देता SQL%FOUND या SQL%NOTFOUND, select into बयान के मामले में कोई अर्थ नहीं पंक्तियों में यह हमेशा no_data_found अपवाद उठाएगा, सिवाय इसके कि, यदि वह चयन कथन समग्र कार्य को आमंत्रित करता है, तो कोई पंक्तियों का चयन नहीं होने पर यह हमेशा डेटा या शून्य वापस आ जाएगा।

varchar डेटाटाइप का उपयोग न करें, इसके बजाय varchar2 डेटाटाइप का उपयोग करें।

2

निकोलस का उत्तर वह है जो आप चाहते हैं यदि आप SELECT INTO का उपयोग करना चाहते हैं। हालांकि, अगर यह अधिक महत्वपूर्ण है कि आप %FOUND या %NOTFOUND का उपयोग करने में सक्षम हैं, बजाय एक कर्सर से ing पर विचार FETCH:

DECLARE 
    VAR SUPP_NM VARCHAR2(100); 
    VAR_SUPP_ID NUMBER := 1; 
    WHILE_VAR CHAR := 'Y'; 
    CURSOR c1 IS 
     SELECT SUPP_NM 
     FROM TEST.SUPPLIER 
     WHERE SUPP_ID = VAR_SUPP_ID; 
BEGIN 
    OPEN c1; 
    FETCH c1 INTO VAR_SUPP_NM; 

    IF c1%NOTFOUND THEN 
      DBMS_OUTPUT.PUT_LINE('SQL DATA NOT FOUND'); 
    ELSIF c1%FOUND THEN 
      DBMS_OUTPUT.PUT_LINE('DATA FOUND'); 
    END IF; 

    CLOSE c1; 
END; 
संबंधित मुद्दे