创建视图EVENT_LOCATION(“EVENT_ID”,“STREET”,“TOWN”)AS SELECT A.EVENT_ID,A.STREET,A.TOWN 来自TBLEVENTLOCATION A. 加入TBLEVENTS B ON A.EVENT_ID = B.EVENT_ID 在哪里B.REGION ='南';
如果我跑
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');
答案 0 :(得分:1)
如果您使用的表中没有保存密钥,则获得ORA-01445,我认为它将返回其中一个密钥保留表的rowid。我不知道如果有几个表是密钥保存会发生什么。
答案 1 :(得分:1)
尝试查看
select * from user_updatable_columns where table_name = 'EVENT_LOCATION'
可更新的列应该表明Oracle所说的表(也就是rowid)。
请记住,如果您使用多表群集(不常见但可能),则同一群集中的不同表可以具有相同ROWID的记录。
就个人而言,我建议(a)不要在任何地方的代码中使用ROWID,(b)如果你这样做,那么在视图中包含一个明确的evt.rowid evt_rowid
列。