2010-07-16 76 views
1

CREATE VIEW EVENT_LOCATION( 「EVENT_ID」, 「街道」, 「城鎮」)AS SELECT A.EVENT_ID,A.STREET,A.TOWN FROM TBLEVENTLOCATION甲 JOIN TBLEVENTS乙 ON A.EVENT_ID = B.EVENT_ID WHERE B.REGION ='South';甲骨文加入視圖 - 該ROWID用於

,如果我跑

SELECT ROWID, STREET, TOWN FROM EVENT_LOCATION 

那麼我應該得到哪些ROWID回來?

我問的原因是: 在數據庫中有許多視圖與上述「模式」。它似乎不同,哪個rowid從不同的視圖返回。即。我得到A.ROWID或B.ROWID ...

更新: 我已經解決了這個使用以下視圖。這基本上保證了ROWID來自正確的表格。感謝您的回覆!

CREATE VIEW EVENT_LOCATION ("EVENT_ID", "STREET", "TOWN") AS 
    SELECT A.EVENT_ID, A.STREET, A.TOWN 
    FROM TBLEVENTLOCATION A 
    WHERE A.EVENT_ID IN (SELECT EVENT_ID FROM TBLEVENTS WHERE REGION = 'South'); 

回答

1

嘗試尋找在

select * from user_updatable_columns where table_name = 'EVENT_LOCATION' 

是可更新的應說明Oracle公司表示是子表(並因此ROWID)列。請記住,如果您使用多表集羣(不常見但可能),則同一集羣中的不同表可以具有相同ROWID的記錄。我個人建議(a)不要在你的代碼中任何地方使用ROWID,(b)如果你這樣做,那麼在視圖中包含一個明確的evt.rowid evt_rowid列。

+0

很高興知道,雖然在我的情況下,我無法看到這一點,因爲我已經強制上述解決方法。 – Richard 2010-07-20 10:50:59

1

既然你ORA-01445如果你使用的表的非關鍵是保我認爲它會返回鍵保留表之一的ROWID。我不知道如果幾個表格是關鍵保留的,會發生什麼。