【问题标题】:Oracle Join View - which rowid is usedOracle Join View - 使用哪个 rowid
【发布时间】:2010-07-20 18:48:38
【问题描述】:

创建视图 EVENT_LOCATION(“EVENT_ID”、“STREET”、“TOWN”)AS 选择 A.EVENT_ID、A.STREET、A.TOWN 从 TBLEVENT位置 A 加入 TBLEVENTS B ON A.EVENT_ID = B.EVENT_ID WHERE B.REGION = '南';

如果我跑

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');

【问题讨论】:

    标签: sql oracle join rowid


    【解决方案1】:

    试试看

    select * from user_updatable_columns where table_name = 'EVENT_LOCATION'
    

    可更新的列应指示 Oracle 称其为子表的表(以及因此的 rowid)。

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

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

    【讨论】:

    • 很高兴知道,尽管在我的情况下我无法查看此内容,因为我已经实施了上述解决方法。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2018-03-14
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      • 2013-02-18
      • 2011-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多