2015-12-15 11 views
6

mi piacerebbe sapere differenza tra rowID e rowNUMQual è rowID & ROWNUM (ROWID vs ROWNUM)

E come vedere entrambi questi nella nostra tabella.

quando eseguo questo:

SELECT * FROM emp WHERE rownum=1 

Esso restituisce una query, ma quando lo faccio lo stesso per rowid dice

tipi di dati incoerenti: ROWID atteso ottenuto NUMERO

E anche in alcune tabelle, rownum restituisce null. Perchè così?

chiarire questo:? Rowid vs rownum (query Demo)

Grazie

EDIT: Richiede l'utilizzo di alias per visualizzare ROWID e ROWNUM (come sono pseudocolonna) come:

SELECT rownum r1, rowid r2 FROM emp

+0

"Nessuna colonna è presente nella tabella" non sembra un errore di Oracle. Come stai gestendo queste domande? – Mureinik

+0

@Mureinik, sto eseguendo queste query su W3schools per ora. Ma anche oracle non supporta il rownum – inityk

+1

FYI - Usa [sqlfiddle.com] (http://sqlfiddle.com) per giocare. – Utsav

risposta

11

Entrambi, rownum e rowing sono pseudo colonne.

IDriga

Per ogni riga nel database, il pseudocolonna ROWID restituisce l'indirizzo della riga.

Una query di esempio potrebbe essere:

SELECT ROWID, last_name 
    FROM employees 
    WHERE department_id = 20; 

Maggiori informazioni rowid qui: https://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns008.htm

ROWNUM

Per ogni riga restituita da una query, il pseudocolonna ROWNUM restituisce un numero che indica l'ordine in cui Oracle seleziona s la riga da una tabella o una serie di righe unite. La prima riga selezionata ha un ROWNUM di 1, il secondo ne ha 2 e così via.

È possibile limitare la quantità di risultati con rownum come questo:

SELECT * FROM employees WHERE ROWNUM < 10; 

Maggiori informazioni rownum qui: https://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns009.htm

Differenza

La differenza reale tra rowid e rownum è, che rowid è un identificatore univoco permanente per quella riga. Tuttavia, il rownum è temporaneo. Se cambi la tua richiesta, il numero del rown si riferirà ad un'altra riga, il rowid no.

Quindi il ROWNUM è un numero consecutivo applicabile solo per una specifica istruzione SQL. Al contrario, il ROWID, che è un ID univoco per una riga.

1

Rownum (numerico) = Numero di sequenza generato dell'output.
Rowid (esadecimale) = Generato automaticamente al momento dell'inserimento della riga.

SELECT rowid,rownum fROM EMP 


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

riga id mostra l'unica identification per riga rownum mostra la serie predefinita univoca di numeri.

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) 
Problemi correlati