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

क्या चयन के लिए एसक्यूएल% पंक्ति गणना का उपयोग करना संभव है?

हां, आप SQL%ROWCOUNT का उपयोग कर सकते हैं . यह PL/SQL में मान्य है।

हालांकि, पीएल/एसक्यूएल में आपकी क्वेरी के नतीजे कहीं जाने की जरूरत है उदा। एक पीएल/एसक्यूएल तालिका में। PL/SQL कभी भी आउटपुट को परिणाम नहीं भेजेगा (टर्मिनल, खिड़की आदि)। तो SELECT * FROM काम नहीं करेगा।

आपका कोड इस तरह दिख सकता है:

DECLARE
  TYPE emp_t ...;
  emp_tab emp_t;

BEGIN
  SELECT *
  BULK COLLECT INTO emp_tab
  FROM emp
  WHERE empname = 'Justin' AND dept='IT';

  IF sql%rowcount > 0 THEN
    .. do something ...
  END IF;
END;
/

अपडेट करें :

अपडेट किए गए प्रश्न बताते हैं कि आप कुछ और ढूंढ रहे हैं।

विकल्प 1:अपवादों का उपयोग करें

यदि 0 पंक्तियाँ या 1 से अधिक पंक्तियाँ हैं, तो इन मामलों को अलग से (त्रुटियों के रूप में) नियंत्रित किया जाता है:

BEGIN
  select PORT_NUMBER,STATIC_IP into outport, outIP
  from TINST
  where INST_ID = in_Hid AND IP_PORT_STATUS = 'Y';

EXCEPTION
  WHEN NO_DATA_FOUND THEN
    outretvalue := -12;
    RETURN;

  WHEN TOO_MANY_ROWS THEN
    outretvalue := -13;
    RETURN;
END;

विकल्प 2:एकत्रीकरण का उपयोग करें

एकत्रीकरण का उपयोग करते हुए, क्वेरी हमेशा ठीक एक पंक्ति लौटाएगी। यदि अब स्रोत पंक्ति WHERE क्लॉज से मेल खाती है, तो दोनों परिणाम मान NULL होंगे। यदि WHERE क्लॉज एक से अधिक पंक्तियों से मेल खाता है, तो अधिकतम लिया जाएगा।

ध्यान दें कि यह क्वेरी एक पोर्ट नंबर और एक आईपी पता लौटा सकती है जो मूल रूप से एक ही पंक्ति में नहीं थे।

select MAX(PORT_NUMBER), MAX(STATIC_IP) into outport, outIP
from TINST
where INST_ID = in_Hid AND IP_PORT_STATUS = 'Y';

IF outport IS NULL OR outIP IS NULL THEN
    outretvalue := -12;
    RETURN;
END IF;

विकल्प 3:ROWNUM का उपयोग करें

यह क्वेरी ज़्यादा से ज़्यादा एक पंक्ति में लौटती है। यदि कोई पंक्ति WHERE क्लॉज से मेल नहीं खाती है, तो एक अपवाद फेंक दिया जाता है और उसे संभालने की आवश्यकता होती है:

BEGIN
  select PORT_NUMBER, STATIC_IP into outport, outIP
  from TINST
  where INST_ID = in_Hid AND IP_PORT_STATUS = 'Y'
  AND ROWNUM = 1;

EXCEPTION
  WHEN NO_DATA_FOUND THEN
    outretvalue := -12;
    RETURN;

END;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle sql - इनपुट पैरामीटर के साथ जुड़ें

  2. पीएल/एसक्यूएल:मैं एक प्रक्रिया में उपयोगकर्ता इनपुट को कैसे संकेत दूं?

  3. जावा वर्ग से तालिका प्रकार के रूप में आउट पैरामीटर के साथ प्रक्रिया को कैसे कॉल करें

  4. ADO.NET से Oracle को कॉल करते समय एकाधिक चयन कथनों को बैचें

  5. एक पंक्ति में एकाधिक पंक्तियों को कैसे संयोजित करें, oracle