web-dev-qa-db-ja.com

rowIDおよびrowNumとは(ROWIDとROWNUM)

rowIDrowNUMの違いを知りたい

そして、これらの両方を表で見る方法。

私がこれを実行すると:

SELECT * FROM emp WHERE rownum=1

1つのクエリを返しますが、rowidに対して同じことをすると、

一貫性のないデータ型:予想されるROWIDはNUMBERになりました

また、一部のテーブルでも、rownumはnullを返します。なぜそうなのか?

これを明確にしてください:rowid vs rownum?(デモクエリ)

ありがとうございました

編集:エイリアスを使用してROWIDおよびROWNUM(疑似列であるため)を表示する必要があります。

SELECT rownum r1, rowid r2 FROM emp

11
inityk

Rownumとrowedは両方とも疑似列です。

Rowid

データベース内の各行について、ROWID疑似列は行のアドレスを返します。

クエリの例は次のとおりです。

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疑似列は、Oracleがテーブルまたは結合された行のセットから行を選択する順序を示す数値を返します。選択された最初の行には1のROWNUMがあり、2番目には2が続きます。

次のようにrownumを使用して、結果の量を制限できます。

SELECT * FROM employees WHERE ROWNUM < 10;

Rownumの詳細はこちら: https://docs.Oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns009.htm

rowidrownumの実際の違いは、rowidはその行の永続的な一意識別子です。ただし、rownumは一時的なものです。クエリを変更すると、rownum番号は別の行を参照しますが、rowidは参照しません。

したがって、ROWNUMは特定のSQLステートメントにのみ適用される連続した番号です。反対に、行の一意のIDであるROWID。

15
blckbird

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

SELECT rowid,rownum fROM EMP


ROWID ROWNUM                 
----- ---------------------- 
AAAR4AAAFAAGzg7AAA, 1                      
AAAR4AAAFAAGzg7AAB, 2                      
AAAR4AAAFAAGzg7AAC, 3                      
AAAR4AAAFAAGzg7AAD, 4                      
AAAR4AAAFAAGzg7AAE, 5      
2
Ruelos Joel
  1. ROWIDは、行またはレコードのアドレスを提供します。 Rownumはレコードのカウントを提供します
  2. ROWIDはデータベースに永続的に格納されます。 Rownumはデータベースに永続的に保存されません
  3. Rowidは、テーブルに挿入されるたびに自動的に割り当てられます。 Rownumは、selectステートメントの出力とともに自動的に取得される動的な値です。
  4. 表示のみを目的としています。
0