Oracle – update nur eine Zeile ohne Verwendung der rowid

Ich versuche update eine view Tabelle, aber nur das erste Ergebnis daraus.
Ich kann rowid – funktioniert nicht auf view Tabelle.
Gibt es eine Möglichkeit, aktualisieren Sie nur die ersten row? wie gesagt mit rowid
Lösungen könnten nicht funktionieren.
select Abfrage Beispiel:

select addr
from addrView
where (tl = '7' and tr = '2')

gibt 4 results, aber wenn update:

update addrView
set home='current'
where (tl = '7' and tr = '2')

Will ich noch upadte der ersten Reihe.

  • mit where rownum = 1
  • die erste Zeile, basierend auf dem, was die Sortierung Logik?
  • basierend auf dem Ergebnis gesetzt.
  • rownum in das Ergebnis der Abfrage?
  • In deinem update-query die where-Klausel hinzufügen rownum = 1
  • versuchen und das Ergebnis posten
  • gibt es nicht irgendeine andere Möglichkeit, die Zeile identifizieren?
  • Nein, die Tabelle ist eine Sicht ohne die Möglichkeit zur eindeutigen Identifizierung einer Zeile.
  • ähm, könnte man die Ansicht aktualisieren enthalten die rowid(s) aus der Tabelle(N), die abgefragt wird?
  • Nein, rowid nicht arbeiten können, trotzdem auf Ansichten.

InformationsquelleAutor Itsik Mauyhas | 2016-05-19



One Reply
  1. 3

    ROWID ist eine eindeutige Kennung für jede Zeile in der Datenbank.

    ROWNUM ist eine eindeutige Kennung für jede Zeile in einer Ergebnismenge.

    Sollten Sie mit Hilfe der ROWNUM version, aber Sie brauchen eine ORDER BY zum erzwingen einer Reihenfolge, sonst hast du keine Garantien, was die „erste“ Zeile zurückgegeben von der Abfrage, und Sie könnten die Aktualisierung einer anderen Zeile.

    update addrView
    set home='current'
    where (tl, tr) = (
       select tl, tr 
       from (select tl, tr
             from addrView 
             where (tl = '7' and tr = '2')
             order by col_1
                 , col_2
                 , col_3 etc.
            ) result_set
        where rownum = 1);

    Aber, wenn Sie nicht kümmern, was die Daten in der ersten Zeile zurückgegeben von der Abfrage, dann können Sie nur rownum = 1.

    update addrView
    set home = 'current'
    where (tl = '7' and tr = '2')
        and rownum = 1;
    • order by in der Abfrage aktualisieren?
    • Versuchen, und posten das Ergebnis.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.