2015-12-15 17 views
6

は私がrowIDrowNUMROWID&たrowNum(ROWNUM対ROWID)

そして、どのように私たちのテーブルにこれらの両方を見ることとの違いを知りたいのですがどのようなものです。

私はこれを実行すると:

それは1つのクエリを返しますが、私はROWIDのために同じことを行うとき、それは言う
SELECT * FROM emp WHERE rownum=1 

一貫性のないデータ型:期待ROWIDだNUMBER

そして、いくつかのテーブルであっても、rownumはnullを返します。なぜそうなのか?

はこの明確にしてください:?ROWNUM対ROWIDを(デモクエリ)

はありがとう

EDIT:

:よう ROWIDROWNUM(彼らは疑似だとして) を表示するためにエイリアスを使用する必要が

SELECT rownum r1, rowid r2 FROM emp

+0

「このような列はテーブルにありません」というエラーは、オラクルのエラーのようには聞こえません。どのようにこれらのクエリを実行していますか? – Mureinik

+0

@Mureinik、私は今W3スクールでこれらのクエリを実行しています。 しかし、オラクルでもrownumはサポートされていません – inityk

+1

FYI - [sqlfiddle.com](http://sqlfiddle.com)を使用して遊んでください。 – Utsav

答えて

11

rownumとrowedは両方とも擬似列です。データベースの各行についてROWIDの

は、ROWID疑似列は行の アドレスを返します。

のクエリ例は次のようになります。ここでROWIDに

SELECT ROWID, last_name 
    FROM employees 
    WHERE department_id = 20; 

詳しい情報:クエリによって返される各行、ROWNUM疑似についてhttps://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns008.htm

ROWNUM

Oracleが選択する順序を示す数字の を返します。行は のテーブルまたは結合された行のセットです。選択された最初の行は1のROWNUMを持ち、 は2番目の行を持ちます。

あなたはこのようにROWNUMのと結果の量を制限することができます:ここでROWNUMの

SELECT * FROM employees WHERE ROWNUM < 10; 

さらに詳しい情報:https://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns009.htm

違い

rowidrownum間の実際の差をそのROWIDは、その行の永続的な一意の識別子です。しかし、ローウは一時的です。クエリを変更すると、rownum番号は別の行を参照し、ROWIDは参照しません。

したがって、ROWNUMは特定のSQL文にのみ適用される連続番号です。逆にROWIDは行の一意のIDです。

1

Rownum(数値) =出力の生成シーケンス番号。
Rowid(16進数) =行挿入時に自動的に生成されます。

SELECT rowid,rownum fROM EMP 


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

行ID、行 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)