जैसा कि निकोलस करस्नोव कहते हैं, प्रक्रिया घोषणा से मेल खाने के लिए आपको कॉल में तर्कों की आवश्यकता है। इस मामले में आपके पास एक OUT
है पैरामीटर, इसलिए आपको उस डेटा के लिए कहीं और चाहिए जिसे आप जाने के लिए चुन रहे हैं - sys_refcursor
से संबंधित कुछ पैरामीटर प्रकार।
यदि आप इसका परीक्षण करने के लिए SQL*Plus का उपयोग कर रहे हैं तो आप एक एसक्यूएल*प्लस वैरिएबल
इसके लिए और फिर उसे एक बाइंड वैरिएबल के रूप में पास करें, और फिर print
कर्सर सामग्री प्रदर्शित करने के लिए आदेश:
variable rc refcursor
exec javao(1, :rc);
print rc
यह SQL डेवलपर में भी काम करता है। जब आप अन्य कोड से प्रक्रिया को कॉल करते हैं, तो आपके पास पीएल/एसक्यूएल ब्लॉक में या बाहरी एप्लिकेशन में घोषित एक चर होगा (उदाहरण के लिए jdbc
के माध्यम से) ), लेकिन उनका विवरण इस बात पर निर्भर करता है कि आप क्या कर रहे हैं।
Java से कॉल करने के लिए, आपको कुछ ऐसा करना होगा:
// get connection
CallableStatement cStmt = conn.prepareCall("{ call javao(?, ?) }");
cStmt.setInt(1, 1);
cStmt.registerOutParameter(2, OracleTypes.cursor);
cStmt.execute();
ResultSet rSet = ((OracleCallableStatement) cStmt).getCursor(2);
while (rSet.next())
{
// get columns from result set row and do something with the data
}
... लेकिन यह छद्म कोड में सीमाबद्ध है, और आपको रिक्त स्थान भरने के लिए दस्तावेज़ीकरण पढ़ने की आवश्यकता होगी (और किसी भी त्रुटि को ठीक करें; उदाहरण के लिए आपको शायद ओरेकल-विशिष्ट कथन प्रकारों की आवश्यकता है), और ऑब्जेक्ट क्लोजिंग और सभी को संभालने में त्रुटि जोड़ें सभी वह अन्य अच्छी चीजें।