Что такое идентификатор rowid & параметр rownum (идентификатор rowid против номера строки)

Я хотел бы знать разницу между rowID и rowNUM

и как увидеть оба из них в нашей таблице.

когда я выполняю это:

SELECT * FROM emp WHERE rownum=1

он возвращает один запрос, но когда я делаю то же самое для rowid, он говорит

несогласованные типы данных: ожидаемый ROWID получил номер

и даже в некоторых таблицах rownum возвращает null . Почему?

пожалуйста, уточните это: rowid против rownum?(Демонстрация запрос)

спасибо

EDIT: требуется использовать псевдоним для отображения ROWID и ROWNUM(как они псевдостолбцом) например:

SELECT rownum r1, rowid r2 FROM emp

3 ответов


оба, 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 выбирает строку из a таблица или набор Соединенных строк. Первая выбранная строка имеет ROWNUM 1, во второй-2, и так далее.

вы можете ограничить количество результатов с помощью rownum следующим образом:

SELECT * FROM employees WHERE ROWNUM < 10;

дополнительная информация о rownum здесь: https://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns009.htm

разница

фактическая разница между rowid и rownum является, что rowid является постоянным уникальным идентификатором для этой строки. Однако rownum является временным. Если вы измените свой запрос, номер rownum будет ссылаться на другую строку, rowid не будет.

таким образом, ROWNUM является последовательным номером, который применим только для определенного оператора SQL. Напротив ROWID, который является уникальным идентификатором для строки.


Rownum (числовой) = сгенерированный порядковый номер вашего выхода.
Rowid (шестнадцатеричный) = генерируется автоматически во время вставки строки.

SELECT rowid,rownum fROM EMP


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

row id показывает уникальный identification в строке rownum показывает уникальный ряд чисел по умолчанию.

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)