首先,我創建一個表
create table TEST
(
id VARCHAR2(11),
name VARCHAR2(11)
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);
然后我插入,洗掉,插入一些資料,并觀察結果:
truncate table test;
insert into test values (1,1);
commit;
insert into test values (2,1);
commit;
insert into test values (3,1);
commit;
delete test where id = 2;
commit;
insert into test values (4,1);
commit;
insert into test values (5,1);
commit;
insert into test values (6,1);
commit;
delete test where id = 5;
commit;
insert into test values (7,1);
commit;
insert into test values (8,1);
commit;
insert into test values (9,1);
commit;
select t.*, t.rowid from TEST t
然后我可以看到查詢結果是:
"ID","NAME","ROWID"
"1","1","AAAGXqAAEAAAAP AAA"
"8","1","AAAGXqAAEAAAAP AAB"
"3","1","AAAGXqAAEAAAAP AAC"
"4","1","AAAGXqAAEAAAAP AAD"
"6","1","AAAGXqAAEAAAAP AAE"
"7","1","AAAGXqAAEAAAAP AAF"
"9","1","AAAGXqAAEAAAAP AAG"
你可以看到第二行是8,但我在后面插入,它應該出現在8后面7。似乎7rowid的順序和插入的順序不一樣。所以在我的實際專案中,我插入了最后一個資料,但最后沒有出現,而是跳轉到中間空間,然后我的客戶找不到最后一個資料。我的問題是,插入資料時不能保證rowid的順序,對嗎?還是我必須添加一個順序欄位?
uj5u.com熱心網友回復:
SQL 表沒有內部順序,從某種意義上說,當 Oracle 執行您的查詢時,它可以以任何順序回傳記錄。對結果集施加順序的方法是ORDER BY在查詢中添加一個子句,例如
SELECT t.*, t.rowid
FROM TEST t
ORDER BY t.ID;
uj5u.com熱心網友回復:
不要依賴,ROWID因為它可以改變。例如,如果您匯出架構然后將其匯入回來,則ROWID可能會發生變化 - 如果您的代碼依賴(錯誤的)假設它是常量- 代碼將中斷并且您將遇到問題。
使用其他東西作為識別符號和值來對表中的行進行排序。例如,一個序列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/346912.html
