Как я могу объединить две таблицы, используя ROWID в oracle? - PullRequest
0 голосов
/ 26 января 2020

Я знаю, что ROWID отличается для каждой строки в разных таблицах. Но я где-то вижу, что две таблицы объединяются с использованием rowid. Итак, я тоже пытался это увидеть, но получаю пустой вывод.

У меня есть таблица персон, которая выглядит как:

enter image description here

scrowid - это столбец, который содержит rowid как:

alter table ot.person 
add scrowid VARCHAR2(200) PRIMARY KEY;

Я заполнил эту таблицу лиц следующим образом:

insert into ot.person(id,name,age,scrowid) 
select id,name, age,a.rowid from ot.per a;

После этого я также создал еще одну таблицу ot.temp_person теми же шагами. Таблица имеет ту же структуру таблицы и типы данных. Итак, я хотел видеть их с помощью внутреннего соединения, и я попробовал их как:

select * from ot.person p inner join ot.temp_person tp ON  p.scrowid=tp.scrowid

Я получил свой вывод в виде пустой таблицы:

enter image description here

Есть ли какой-нибудь возможный способ объединения двух таблиц с использованием rowid? Или я забыл некоторые шаги? Если есть какой-либо способ объединить эти две таблицы, используя rowid, то предложите мне.

Ответы [ 2 ]

2 голосов
/ 26 января 2020

Определите scrowid как тип данных ROWID или UROWID, тогда он может работать.

Однако, как правило, ROWID может измениться в любое время, если вы не заблокируете запись, поэтому присоединение к вашим таблицам было бы плохим ключом.

0 голосов
/ 26 января 2020

Я думаю, что, возможно, вы неправильно поняли слияние двух таблиц с помощью rowid, если только вы не видели объединения, перекрестного соединения или полного внешнего соединения. Любая попытка сопоставить rowid, независимо от того, как вы ее определяете, обречена на провал. Это вытекает из того, что это внутреннее определение. Rowid - это не просто тип данных, это внутренняя структура (это более старая версия описания, но Oracle не связывает версии документации.) Эти поля в основном: - Номер объекта данных object - блок данных в файле данных, в котором находится строка - позиция строки в блоке данных (первая строка - 0) - файл данных, в котором находится строка (первый файл - 1). Номер файла относительно табличного пространства.

Таким образом, хотя разные таблицы могут иметь одинаковый идентификатор строки, это крайне маловероятно. Таким образом, внутреннее соединение всегда возвращает null.

...