Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

pl/sql ब्लॉक से डेटा पंक्तियाँ लौटाएँ

एक अनाम ब्लॉक कुछ भी वापस नहीं कर सकता। आप ब्लॉक के अंदर एक संग्रह प्रकार या रेफरी कर्सर सहित बाइंड वैरिएबल को मान असाइन कर सकते हैं। लेकिन संग्रह को ब्लॉक के बाहर परिभाषित, साथ ही घोषित करना होगा। यही है, यह एक प्रकार होना चाहिए जिसे आप सादे एसक्यूएल में उपयोग कर सकते हैं, पीएल/एसक्यूएल में परिभाषित कुछ नहीं। फिलहाल आप एक पीएल/एसक्यूएल प्रकार का उपयोग कर रहे हैं जिसे ब्लॉक के भीतर परिभाषित किया गया है, और एक वैरिएबल जिसे ब्लॉक के भीतर भी घोषित किया गया है - इसलिए यह क्लाइंट के दायरे से बाहर है, और इसके बाहर वैध प्रकार भी नहीं होगा . (इसे शुरू करने की भी आवश्यकता नहीं है, लेकिन यह एक छोटी सी समस्या है)।

वास्तव में इसका उपभोग कैसे किया जाएगा, इस पर निर्भर करते हुए, एक विकल्प रेफरी कर्सर का उपयोग करना है, और आप इसे SQL*Plus या SQL Developer के माध्यम से variable के साथ घोषित और प्रदर्शित कर सकते हैं। और print आदेश। उदाहरण के लिए:

variable rc sys_refcursor

begin
  open :rc for ( select ... /* your cursor statement */ );
end;
/

print rc

आप क्लाइंट एप्लिकेशन से कुछ ऐसा ही कर सकते हैं, उदा। एक रेफरी कर्सर या एक आउट पैरामीटर के साथ एक प्रक्रिया लौटाने वाला एक फ़ंक्शन है जो एक रेफ कर्सर है, और इसे एप्लिकेशन से बांधें। फिर परिणाम सेट के रूप में रेफ कर्सर पर पुनरावृति करें। लेकिन विवरण आपके एप्लिकेशन द्वारा उपयोग की जा रही भाषा पर निर्भर करता है।

एक अन्य विकल्प एक पाइपलाइन फ़ंक्शन है जो एक तालिका प्रकार देता है - फिर से SQL स्तर पर परिभाषित किया जाता है (create type के साथ) ) पीएल/एसक्यूएल में नहीं - जो एक बार में लौटाए गए संग्रह की तुलना में कम संसाधनों का उपभोग कर सकता है।

लेकिन मुझे सवाल करना होगा कि आप ऐसा क्यों कर रहे हैं। आपने कहा "बाद के बैचों के लिए खुदाई करने में काफी अधिक समय लगता है", ऐसा लगता है कि आप अपनी क्वेरी में एक पेजिंग तंत्र का उपयोग कर रहे हैं, एक पंक्ति संख्या उत्पन्न कर रहे हैं और फिर उसके भीतर 100 की सीमा चुन रहे हैं। यदि आपका क्लाइंट/एप्लिकेशन सभी पंक्तियों को प्राप्त करना चाहता है तो एकल क्वेरी निष्पादन करना आसान होगा लेकिन लाने परिणाम बैचों में सेट किया गया।

दुर्भाग्य से आवेदन के बारे में किसी भी जानकारी के बिना यह सिर्फ अटकलें हैं...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं कैसे बता सकता हूं कि मेरा ओरेकल सिस्टम यूनिकोड या मल्टीबाइट वर्णों का समर्थन करने के लिए सेट है या नहीं?

  2. उपयोगकर्ताओं को तालिका से चयन करने की अनुमति देना

  3. साक्षात्कार प्रश्न:कॉलम स्तर पर पिछले 3 महीने का एकत्रीकरण कैसे प्राप्त करें?

  4. Oracle Sql में कॉलम रो ट्रांसफर

  5. JDBC में Oracle के निदान में सही ढंग से नाम कैसे प्राप्त करें?