2013-02-01 27 views
7

में एक संग्रहीत प्रक्रिया कॉलिंग मैं एक एक नया संग्रहीत प्रक्रिया में परिभाषित किया गया है, लेकिन जब यह बुला एक त्रुटि मिलती है,टॉड

CREATE OR REPLACE PROCEDURE SCOTT.getempsal(
     p_emp_id IN NUMBER, 
     p_emp_month IN CHAR, 
     p_emp_sal OUT INTEGER) 

AS 
BEGIN 
    SELECT EMP_SAL 
     INTO p_emp_sal 
     FROM EMPLOYEE_SAL 
    WHERE EMP_ID = p_emp_id 
    AND EMP_MONTH = p_emp_month; 

END getempsal; 

और यह कॉल करने के लिए कोशिश कर रहा है:

getempsal(1,'JAN',OUT) --Invalid sql statement. 
+0

टॉड कहा जा सकता है एक ** जीयूआई आधारित क्लाइंट उपकरण **, एसक्यूएल * प्लस के विपरीत है। तो, आप प्रक्रिया को सीधे देख सकते हैं और इसे टूल से ही निष्पादित कर सकते हैं। –

उत्तर

14

आपका प्रक्रिया से बाहर होता है पैरामीटर, इसलिए आपको इसे ब्लॉक में कॉल करने की आवश्यकता है:

declare 
a number; 
begin 
    getempsal(1,'JAN',a); 
    dbms_output.put_line(a); 
end; 

एक सरल प्रक्रिया (चलिए एक संख्या paramete के साथ कहते हैं आर) के साथ

exec proc(1); 

या

begin 
proc(1); 
end; 
+2

यदि प्रक्रिया कर्सर लौटाती है, तो बस इसे घोषित करें और फिर निम्न कार्य करें: : आउटपुट: = कर्सर; यह डेटा ग्रिड में कर्सर सामग्री मुद्रित करेगा। –

+0

एक और उपयोगी बात - आप आउटपुट कर्सर के साथ सभी संग्रहीत प्रक्रिया कर सकते हैं: exec package_name.procedure_name ('param', 'param2', 0) और आपको डेटाग्रिड में कर्सर सामग्री मिल जाएगी। –