1

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

如果我跑

SELECT ROWID, STREET, TOWN FROM EVENT_LOCATION 

那么我应该取回哪个 ROWID?

我要问的原因是:在数据库中有很多具有上述“模式”的视图。从不同视图返回的 rowid 似乎有所不同。IE。我得到了 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');
4

2 回答 2

1

由于如果您使用的表都不是保留键的,那么您会得到ORA-01445,我认为它将返回其中一个保留键表的 rowid。我不知道如果几个表都保留密钥会发生什么。

于 2010-07-16T14:14:53.923 回答
1

试试看

select * from user_updatable_columns where table_name = 'EVENT_LOCATION'

可更新的列应该指示 Oracle 说是子表的表(以及因此的 rowid)。

请记住,如果您使用多表集群(不常见,但可能),那么同一集群中的不同表可以具有具有相同 ROWID 的记录。

就个人而言,我建议 (a) 不要在任何地方的代码中使用 ROWID,并且 (b) 如果这样做,则evt.rowid evt_rowid在视图中包含一个显式列。

于 2010-07-19T01:27:35.293 回答