हां, आप 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;