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

डायनामिक एसक्यूएल निष्पादित करने वाले ओरेकल पीएल/एसक्यूएल अज्ञात ब्लॉक से परिणामसेट/कर्सर कैसे वापस करें?

आप उस कर्सर को वापस करने के लिए एक PL/SQL फ़ंक्शन लिख सकते हैं (या यदि आपके पास इससे संबंधित अधिक कोड है तो आप उस फ़ंक्शन को पैकेज में रख सकते हैं):

CREATE OR REPLACE FUNCTION get_allitems
  RETURN SYS_REFCURSOR
AS
  my_cursor SYS_REFCURSOR;
BEGIN
  OPEN my_cursor FOR SELECT * FROM allitems;
  RETURN my_cursor;
END get_allitems;

यह कर्सर वापस कर देगा।

सुनिश्चित करें कि अपना SELECT न डालें - जब संभव हो तो पीएल/एसक्यूएल में उद्धरणों में स्ट्रिंग करें। इसे स्ट्रिंग्स में डालने का मतलब है कि इसे कंपाइल समय पर चेक नहीं किया जा सकता है, और जब भी आप इसका इस्तेमाल करते हैं तो इसे पार्स करना पड़ता है।

यदि आपको वास्तव में गतिशील SQL का उपयोग करने की आवश्यकता है तो आप अपनी क्वेरी को सिंगल कोट्स में रख सकते हैं:

  OPEN my_cursor FOR 'SELECT * FROM allitems';

जब भी फ़ंक्शन को कॉल किया जाता है, तो इस स्ट्रिंग को पार्स करना पड़ता है, जो आमतौर पर धीमा होगा और रनटाइम तक आपकी क्वेरी में त्रुटियों को छुपाता है।

हार्ड पार्स से बचने के लिए जहां संभव हो बाइंड-वेरिएबल का उपयोग करना सुनिश्चित करें:

  OPEN my_cursor FOR 'SELECT * FROM allitems WHERE id = :id' USING my_id;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. My 11g ऑप्टिमाइज़र आँकड़े नौकरी मुझ पर छोड़ो - फिक्स्ड

  2. Oracle का उपयोग करके Django में स्वचालित परीक्षण बनाते समय ORA-65096 त्रुटि को ठीक करना

  3. वर्ष के अनुसार अनुक्रम रीसेट करें, न कि न्यूनतम या अधिकतम मान के अनुसार

  4. पुराने आँकड़ों की जाँच कैसे करें

  5. Oracle में सबस्ट्र या LIKE तेज है?