2015-12-15 7 views
6

मैं rowID औरrowID और ROWNUM (ROWID बनाम ROWNUM)

और कैसे के बीच rowNUM इन दोनों हमारे तालिका में दिखाई देने अंतर जानना चाहते हैं क्या है।

जब मैं इस पर अमल:

SELECT * FROM emp WHERE rownum=1 

यह एक क्वेरी देता है, लेकिन यह कहना है जब मैं rowid के लिए भी ऐसा ही करने

असंगत डेटाटाइप्स: उम्मीद ROWID मिला संख्या

और यहां तक ​​कि कुछ तालिकाओं में, राउनम शून्य लौटता है। ऐसा क्यों?

इस स्पष्ट करें:? ROWNUM बनाम rowid (डेमो क्वेरी)

धन्यवाद

संपादित करें:

: ROWID और ROWNUM (वे pseudocolumn हैं तो) की तरह प्रदर्शित करने के लिए अन्य नाम का उपयोग करने के लिए आवश्यकता होती है

SELECT rownum r1, rowid r2 FROM emp

+0

"तालिका में ऐसा कोई स्तंभ नहीं है" एक ऑरैकल त्रुटि की तरह नहीं लगता है। आप इन प्रश्नों को कैसे चला रहे हैं? – Mureinik

+0

@Mureinik, मैं अब इन प्रश्नों को W3schools पर चला रहा हूं। लेकिन यहां तक ​​कि ऑरैकल राउनम – inityk

+1

एफवाईआई का समर्थन नहीं करता है - आसपास खेलने के लिए [sqlfiddle.com] (http://sqlfiddle.com) का उपयोग करें। – Utsav

उत्तर

11

दोनों, रोउनम और पंक्तियां छद्म कॉलम हैं।

Rowid

डेटाबेस में प्रत्येक पंक्ति के लिए, ROWID pseudocolumn पंक्ति के पता देता है।

एक उदाहरण क्वेरी होगा:

SELECT ROWID, last_name 
    FROM employees 
    WHERE department_id = 20; 

अधिक rowid पर जानकारी यहाँ: https://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns008.htm

ROWNUM

प्रत्येक पंक्ति एक प्रश्न, ROWNUM pseudocolumn द्वारा वापस लिए ऑरकल का चयन करने वाले ऑर्डर को इंगित करने वाले संख्या देता है तालिका या शामिल पंक्तियों के सेट से पंक्ति है। चयनित पहली पंक्ति में 1, का ROWNUM है, दूसरे में 2 है, और इसी तरह।

आप इस तरह ROWNUM के साथ परिणाम की मात्रा को सीमित कर सकते हैं:

SELECT * FROM employees WHERE ROWNUM < 10; 
यहाँ ROWNUM पर

और जानकारी: https://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns009.htm

अंतर

rowid और rownum के बीच वास्तविक अंतर है, वह पंक्ति उस पंक्ति के लिए एक स्थायी अद्वितीय पहचानकर्ता है। हालांकि, राउनम अस्थायी है। यदि आप अपनी क्वेरी बदलते हैं, तो राउनम नंबर दूसरी पंक्ति का संदर्भ देगा, पंक्तिबद्ध नहीं होगा।

तो ROWNUM एक सतत संख्या है जो केवल एक विशिष्ट SQL कथन के लिए लागू होती है। इसके विपरीत ROWID, जो एक पंक्ति के लिए एक अद्वितीय आईडी है।

1

राउनम (न्यूमेरिक) = आपके आउटपुट की जेनरेटेड अनुक्रम संख्या।
रोविद (हेक्साडेसिमल) = पंक्ति के सम्मिलन के समय स्वचालित रूप से जेनरेट किया गया।

SELECT rowid,rownum fROM EMP 


ROWID ROWNUM     
----- ---------------------- 
AAAR4AAAFAAGzg7AAA, 1      
AAAR4AAAFAAGzg7AAB, 2      
AAAR4AAAFAAGzg7AAC, 3      
AAAR4AAAFAAGzg7AAD, 4      
AAAR4AAAFAAGzg7AAE, 5  
-1

पंक्ति आईडी पंक्ति rownum के लिए अद्वितीय identification संख्या का अनूठा डिफ़ॉल्ट श्रृंखला से पता चलता पता चलता है।

select * from emp 
where rownum<=5; (it will execute correctly and gives output first 5 rows in your table) 

select * from emp 
where rowid<=5; (wrong because rowid helpful to identify the unique value) 
संबंधित मुद्दे