2010-07-16 5 views
1

VIEW EVENT_LOCATION CREER ("EVENT_ID", "RUE", "VILLE") AS SELECT A.EVENT_ID, A.STREET, A.TOWN DE TBLEVENTLOCATION A REJOIGNEZ TBLEVENTS B ON A.EVENT_ID = B.EVENT_ID OÙ B.REGION = 'Sud';Oracle Rejoindre View - qui rowid est utilisé

si je lance

SELECT ROWID, STREET, TOWN FROM EVENT_LOCATION 

alors que ROWID dois-je retourner?

Je pose la question est: Dans la base de données il y a beaucoup de vues avec ce qui précède « pattern ». Il semble différer quel rowid est retourné à partir de différentes vues. c'est à dire. Je reçois à la fois A.ROWID ou B.ROWID ...

MISE À JOUR: J'ai résolu cela en utilisant la vue suivante. Ce qui garantit essentiellement le ROWID vient de la bonne table. Merci pour vos réponses!

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

Répondre

1

Essayez de regarder

select * from user_updatable_columns where table_name = 'EVENT_LOCATION' 

Les colonnes qui sont actualisable doivent indiquer la table (et donc le rowid) qui dit Oracle est l'enfant.

Gardez à l'esprit que, si vous utilisez des clusters multi-tables (pas commun, mais possible), puis des tables différentes dans le même groupe peuvent avoir des enregistrements avec le même ROWID.

Personnellement, je recommanderais (a) ne pas utiliser ROWID dans votre code n'importe où et (b) si vous le faites, alors inclure une colonne explicite evt.rowid evt_rowid dans la vue.

+0

Bon à savoir bien que dans mon cas, je ne pouvais pas regarder cela depuis je l'ai déjà imposé la solution de contournement ci-dessus. – Richard

1

Puisque vous obtenez ORA-01445 si non des tables que vous utilisez sont I clé en préservant pense qu'il retournera le rowid d'un des tableaux clés de préservation. Je ne sais pas ce qui se passera si plusieurs tables préservent les clés.