簡體   English   中英

如何在oracle中使用ROWID合並兩個表?

[英]How can I merge two tables using ROWID in oracle?

我知道不同表中每一行的ROWID都是不同的。但是,我在某處看到兩個表正在使用 rowid 進行合並。所以,我也試圖看到它,但我得到了空白輸出。

我有一個人表,它看起來像:

在此處輸入圖片說明

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

我的輸出是空表:

在此處輸入圖片說明

有什么可能的方法可以使用rowid合並兩個表嗎? 或者我忘記了一些步驟?如果有任何方法可以使用rowid連接這兩個表,然后建議我。

將 scrowid 定義為數據類型ROWIDUROWID那么它可能會起作用。

但是,一般而言,除非您鎖定記錄,否則 ROWID 可能隨時更改,因此加入您的表將是一個糟糕的鍵。

我想您可能誤解了通過 rowid 合並兩個表,除非您實際看到的是聯合、交叉聯接或完全外部聯接。 任何匹配 rowid 的嘗試,無論你如何定義它,都注定要失敗。 這是因為它是一個內部定義。 Rowid 不僅僅是一種數據類型,它還是一種內部結構(這是描述的舊版本,但 Oracle 不鏈接文檔版本。)這些字段基本上是: - 對象的數據對象編號 - 數據文件中的數據塊行所在的行 - 行在數據塊中的位置(第一行為 0) - 行所在的數據文件(第一個文件為 1)。 文件號是相對於表空間的。

因此,雖然不同的表可能具有相同的 rowid,但這種可能性極小。 因此對它們進行內部連接總是返回 null。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM