Wie zu verwenden ROWID mit einer Oracle-Join-View
Ich versuche zu erstellen, eine eindeutige Kennung für jede Zeile in einer Ansicht. Die Ansicht, die ich habe, reiht sich in eine Menge von Tabellen und damit keine einer Tabelle primary key wird mir helfen, die Zeile identifizieren.
Tun, eine google-Suche, es sieht aus wie ich möglicherweise in der Lage zu erreichen, dies über rowid? Aber ich bin mir nicht sicher, wie Sie Sie zur Referenz der Ansicht rowid. Unten ist ein Beispiel, wie ich mir vorgestellt rowid funktionieren würde, aber es offensichtlich nicht funktioniert und eine mehrdeutige Spalte' Fehler, da bin ich nicht die Angabe einer bestimmten Tabelle für die rowid.
Ex:
with v_someTable (select...),
v_anotherTable as (select blah, id from v_someTable where...),
v_yetAnotherTable as (select foo, id from v_someTable where...)
select distinct rowid, rt.key, v1.blah, v2.foo
from realTable rt
left join v_anotherTable v1 on v1.id=rt.id
left join v_yetAnotherTable v2 on v2.id=rt.id
Ich versuche, dies in einer Abfrage und nicht in einer gespeicherten Prozedur. Jede mögliche Hilfe würde geschätzt!
Dank!
InformationsquelleAutor user973479 | 2011-12-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mein Verständnis ist, dass ein
rowid
bezieht sich auf eine Zeile in einer physikalischen Tabelle, anstatt eine Zeile in einer Ergebnismenge (das ist tatsächlich das, was ein view ist).Um einen eindeutigen Bezeichner für jede Zeile, würden Sie brauchen, um zu kombinieren die Primärschlüssel der Tabellen, die Sie treten in gewisser Weise.
InformationsquelleAutor paulbailey
Wenn Sie keinen primary primary keys auf alle Ihre Tabellen können Sie die rowids aus den einzelnen Tabellen und verketten:
InformationsquelleAutor Kevin Burton
Nicht die ROWID pseudo-Spalte, ist es Speicher abhängig (und möglicherweise ändern, wenn die nützliche
ENABLE ROW MOVEMENT
verwendet wird). Sie können auch nicht verwenden Sie es zum nachschlagen (verbundene) Datensätze auf die Ansicht in einer effizienten Art und Weise.Ist es besser, verwenden Sie die Reale PKs auf Ihre Unterlagen in diesem Fall (für index lookups zu arbeiten). Und ich würde nicht mit Ihnen, sondern nur mit mehreren Spalten - nur so können Sie re-aktivieren Sie Sie (mit index-Unterstützung).
InformationsquelleAutor eckes
Diese Frage beantwortet ist, für eine Zeit jetzt aber bitte seien Sie vorsichtig, wenn concatinating Primärschlüssel.
Zum Beispiel, wenn Sie haben
key1 = 23 and key2 = 45
und concatinate es zu2345
es ist nicht klar, ob die Schlüssel wurden23 and 45
oder wenn Sie2 and 345
.Verwenden ein Trennzeichen
(23,45 -> 23_45)
, die kann nicht auftreten, in der Sie eine der Tasten (nicht alle Tasten, numerisch). Oder füllen Schlüssel, um maximal mögliche Länge(23,45 -> 00230045 (for key1 and key2 NUMBER(4,0)))
.Sich auch bewusst sein, Orakel-Funktion (nicht in allen DBs kann damit umgehen) definieren Sie primär-und Fremdschlüssel über mehrere Spalten, die möglicherweise schneller und erweitern Sie Ihre Möglichkeiten für sauber schließt, ohne zu teilen Ihre aneinandergehängt Schlüssel.
InformationsquelleAutor Henning