Frage

Ich versuche, eine eindeutige Kennung für jede Ansichtszeile zu erstellen.Die Ansicht, die ich habe, schließt sich viele Tabellen an, und daher hilft mir der primäre Taste keiner Tabelle, die Zeile zu identifizieren.

Eine Google-Suche durchführtAber ich bin mir nicht sicher, wie ich auf die Views ROWID verweisen soll.Nachfolgend ist ein Beispiel dafür, wie ich es mir vorstellen würde, dass ROWID funktioniert, aber es fehlt offensichtlich mit einem "mehrdeutigen Säulenfehler", da ich keine bestimmte Tabelle für RowID angeben kann.

ex: generasacodicetagpre.

Ich versuche dies in einer Abfrage und nicht in einem gespeicherten Vorgang zu tun.Jede Hilfe wäre dankbar!

danke!

War es hilfreich?

Lösung

Mein Verständnis ist, dass sich ein rowid auf eine Zeile in einem physischen Tisch bezieht, anstatt eine Zeile in einem Ergebnissatz (was effektiv ist, was eine Ansicht ist).

Um eine eindeutige Kennung für jede Zeile zu erhalten, müssen Sie die primären Tasten der Tabellen kombinieren, die Sie in irgendeiner Weise anschließen.

Andere Tipps

Wenn Sie nicht für alle Ihre Tabellen Primärprimärschlüssel haben, können Sie die Rowids aus den einzelnen Tabellen auswählen und verketten:

SELECT rt.rowid||v1.rowid||v2.rowid as uniqueid
FROM ......

Verwenden Sie nicht die ROWID-Pseudospalte, sie ist speicherabhängig (und kann sich ändern, wenn der nützliche generische Codetagcode verwendet wird).Sie können es auch nicht verwenden, um (verknüpfte) Datensätze in der Ansicht auf effiziente Weise nachzuschlagen.

In diesem Fall ist es besser, die echten PKs in Ihren Datensätzen zu verwenden (damit die Indexsuche funktioniert).Und ich würde ihnen nicht beitreten, sondern nur mehrere Spalten verwenden - nur so können Sie sie erneut auswählen (mit Indexunterstützung).

Diese Frage wird bereits seit einiger Zeit beantwortet. Seien Sie jedoch vorsichtig, wenn Sie Primärschlüssel zusammenfassen. Wenn Sie beispielsweise key1 = 23 and key2 = 45 haben und ihn mit 2345 verknüpfen, ist nicht klar, ob die Schlüssel 23 and 45 oder 2 and 345 .

Verwenden Sie ein Trennzeichen (23,45 -> 23_45) , das in keinem der Schlüssel vorkommen kann (nicht alle Schlüssel sind numerisch).Oder füllen Sie die Schlüssel bis zur maximal möglichen Länge (23,45 -> 00230045 (for key1 and key2 NUMBER(4,0))) aus.

Beachten Sie auch die Oracles-Funktion (nicht alle DBs können damit umgehen), um Primär- und Fremdschlüssel über mehrere Spalten zu definieren. Dies kann schneller sein und Ihre Möglichkeiten für saubere Verknüpfungen erweitern, ohne dass Sie Ihren verknüpften Schlüssel teilen müssen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top