2013-08-23 6 views
10

मैं हाल ही में एक प्रक्रिया है कि इस तरह से परिभाषित किया गया है बनाया:क्या मैं डिफ़ॉल्ट शून्य पैरामीटर के साथ एक प्रक्रिया निष्पादित कर सकता हूं?

PLS-00306: wrong number or types of arguments in call to 'SPM_UPDATE_COURT_COST' 

यहाँ पर अमल मेरे विवरण की तरह लग रहा है:

create or replace 
PACKAGE 
pkg_dml_legal_transactions 
AS 
    PROCEDURE spm_update_court_cost(
    p_court_state  IN legal_court_cost.state%TYPE, 
    p_tran_code  IN legal_court_cost.transaction_code%TYPE, 
    p_legal_court  IN legal_court_cost.court%TYPE default null, 
    p_end_date  IN legal_court_cost.end_date%TYPE, 
    p_cost_min  IN legal_court_cost.cost_range_min%TYPE, 
    p_cost_max  IN legal_court_cost.cost_range_max%TYPE, 
    p_bal_min   IN legal_court_cost.bal_range_min%TYPE DEFAULT NULL, 
    p_bal_max   IN legal_court_cost.bal_range_max%TYPE DEFAULT NULL); 

end pkg_dml_legal_transactions; 

जब मैं प्रक्रिया execute करने का प्रयास है, मैं यह बताते हुए कि कोई त्रुटि मिलती है :

execute pkg_dml_legal_transactions.spm_update_court_cost('NJ',1,sysdate,1000,40000); 

अब मैं समझता हूँ कि क्या त्रुटि का अर्थ है, लेकिन मैं समझ मापदंडों तो शून्य पर चूक कर रहे हैं अगर मैं बस उन्हें छोड़ सकता है, लेकिन स्पष्ट रूप से नहीं। क्या इसके चारों ओर एक रास्ता है?

+0

'po_cost_max' को' legal_court_cost.cost_range_max% टाइप डिफॉल्ट नल 'बनाने का प्रयास करें अन्यथा आपको प्रक्रिया में पैरामीटर पास करना होगा क्योंकि यह मान की अपेक्षा करता है क्योंकि आपने' डिफॉल्ट नूल ' – user75ponic

+0

परिभाषित नहीं किया है यदि आप इसकी अपेक्षा नहीं कर रहे हैं शून्य, तो आपको प्रक्रिया के लिए पैरामीटर पास करना होगा। – user75ponic

+0

एकमात्र पैरामीटर जिन्हें शून्य होने की अनुमति है, वे कोर्ट हैं, और शेष न्यूनतम और अधिकतम हैं। मेरे निष्पादन में मेरे पास उन सभी हैं जिन्हें शून्य होने की अनुमति नहीं है। – user2405778

उत्तर

35

पीएल/एसक्यूएल में, आप या तो नामित पैरामीटर नोटेशन या स्थितित्मक नोटेशन का उपयोग कर प्रक्रिया को कॉल कर सकते हैं। आप कुछ मानकों को छोड़ना चाहते हैं, तो आप

execute pkg_dml_legal_transactions.spm_update_court_cost(p_court_state => 'NJ', 
                  p_tran_code => 1, 
                  p_end_date => sysdate, 
                  p_cost_min => 1000, 
                  p_cost_max => 40000); 

आम तौर पर, जब आप एक प्रक्रिया डिज़ाइन कर रहे हैं, आप सभी वैकल्पिक पैरामीटर अंत में डाल नामित पैरामीटर संकेतन का उपयोग करने की आवश्यकता होगी तो फोन करने वाले भी कर सकता है कि स्थितित्मक नोटेशन का उपयोग करें।

+0

अहह, हाँ कि घंटी बजती है। मुझे थोड़ी देर पहले इस बारे में पढ़ना याद है, लेकिन यह मेरे दिमाग में फिसल गया होगा। आपका बहुत बहुत धन्यवाद! – user2405778

+1

जस्टिन +1 इसे बहुत अच्छी तरह से समझाने के लिए। – user75ponic

5

आप पहले छोड़े गए पैरामीटर तक मिश्रित दृष्टिकोण, स्थितित्मक नोटेशन का उपयोग कर सकते हैं, बाकी के लिए नोटेशन नामित।

declare 
    procedure do_something(p_foo IN NUMBER 
         ,p_bar IN VARCHAR2 DEFAULT NULL 
         ,p_baz IN VARCHAR2) IS 
    begin 
    null; 
    end; 
begin 
    do_something(12, p_baz => 'abc'); 
end; 

लेकिन मैं जस्टिन का प्रस्ताव चुनता हूं।

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

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