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

मेरे कर्सर को मेरे ऑरैकल पीएल/एसएलक्यू फ़ंक्शन में लौटा दिया लेकिन सभी पंक्तियों को वापस नहीं किया जा रहा है। क्या आप Oracle pl/sql फ़ंक्शन में केवल 1 पंक्ति लौटा सकते हैं?

into_clause . की परिभाषा के लिए दस्तावेज़ीकरण से :सेलेक्ट इनटू स्टेटमेंट एक पंक्ति से एक या अधिक कॉलम प्राप्त करता है और उन्हें एक या अधिक स्केलर वेरिएबल या एक रिकॉर्ड वेरिएबल में स्टोर करता है

फिर एक से अधिक पंक्तियों को वापस करने के मामलों के विरुद्ध वर्तमान चयन कथन को प्रतिस्थापित किया जाना चाहिए। निम्नलिखित प्रश्न आपके वर्तमान SQL चयन कथन के विकल्प हो सकते हैं

SELECT reserve_id
  INTO resid
  FROM
  ( SELECT r.*,
           ROW_NUMBER() OVER (ORDER BY 0) AS rn
      FROM reservation
     WHERE Cust_name = cname
       AND Hotel_id = hotelID
       AND reserve_date = resdate
   )
  WHERE rn = 1;

यदि DB संस्करण 12+ है, तो उपयोग करें

SELECT reserve_id
  INTO resid
  FROM reservation
 WHERE Cust_name = cname
   AND Hotel_id = hotelID
   AND reserve_date = resdate
 FETCH NEXT 1 ROW ONLY; 

केवल एक पंक्ति को वापस करने के लिए एक सबक्वायरी के बिना, यह देखते हुए कि आप केवल उन कॉलम के लिए डुप्लिकेट प्राप्त करते हैं, जिसमें डेटा के लिए कोई ऑर्डरिंग नियम नहीं है। इन प्रश्नों के उपयोग के माध्यम से, no_data_found को संभालने की कोई आवश्यकता नहीं है या too_many_rows अपवाद।

अपडेट करें: यदि आपका उद्देश्य एक से अधिक पंक्तियाँ होने पर भी सभी पंक्तियों को वापस करना है, तो आप SYS_REFCURSOR का उपयोग कर सकते हैं जैसे

CREATE OR REPLACE FUNCTION findres(cname   reservation.cust_name%type,
                                   hotelID reservation.hotel_id%type,
                                   resdate reservation.reserve_date%type)
  RETURN SYS_REFCURSOR IS
  recordset SYS_REFCURSOR;
BEGIN
  OPEN recordset FOR
  SELECT reserve_id
    FROM reservation
   WHERE Cust_name = cname
     AND Hotel_id = hotelID 
     AND reserve_date = resdate;

  RETURN recordset;
END;
/

और इस तरह से कॉल करें कि

VAR   v_rc REFCURSOR
EXEC :v_rc := findres('Avoras',111,date'2020-12-06');
PRINT v_rc

SQL डेवलपर के कंसोल से।




  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. एक्सेल से आयात करने के लिए SQL डेवलपर

  3. योग की गणना करने और पिछली पंक्तियों से योग जोड़ने के लिए sql क्वेरी

  4. Oracle Enterprise Manager का काम है हंग

  5. ऑरैकल संग्रहीत कार्यविधि में टेक्स्ट की कई पंक्तियों को बदलें या हटाएं