ORA-30926 Fehler als Folge einer Operation Merge

ORA-30926 Fehler tritt gewöhnlich auf, wenn Operationen Merge, und es ist normal, dass uns etwas missratenen verlassen, da die Beschreibung von ihr geben nicht viel Information darüber, was passiert:
ORA-30926: nicht in der Lage bis September erhalten, um stabil in der Zeilen in den Quelltabellen.

Normalerweise ist dieser Fehler auftritt, wenn die Operation Merge, um ein Ziel Zeile der Tabelle Quelle aktualisiert werden unter ihm mehr als eine Zeile in. Da der Motor nicht weiß, welcher Datensatz zurückgibt wählen einen Fehler. Es ist ein Problem der Doppelarbeit in der Quelltabelle.

Beispiel:

  • Wir haben:
    TABLA_ORIGENmit Werten
    ID Beschreibung
    1 x 'Der erste Wert "
    1 'Der id-Wert verdoppelt "
    2 'Ein weiterer Wert' Und mit den Werten TABLA_DESTINO
    ID Beschreibung
    1 x 'Preis zu aktualisieren "
    2 'Das wird keine Mühe "
    3 'Das bleibt gleich "
  • Wir wollen fusionieren mit der folgenden Anweisung:

Merge in dest TABLA_DESTINO
USING TABLA_ORIGEN ori
ON (= dest.ID ori.ID)
WENN DANN MATCHED UPDATE SET = a.Descripcion b.Descripcion;

Mit diesen Daten erhalten wir die folgende Fehlermeldung auf TABLA_ORIGEN:
ORA-30926: Fehler beim Tabellen erhalten eine stabile Gruppe von Zeilen in der Quelle

  • Angesichts dieser Fehler haben wir 3 Möglichkeiten: 1 -.Die Beseitigung von doppelten Datensätzen aus der Quelltabelle:

TABLA_ORIGEN DELETE FROM WHERE id = 1 UND Beschreibung = 'Der id-Wert verdoppelt "

2 -. Überprüfen Sie die wichtigsten Möglichkeiten, die wir machen das Mitmachen der Zusammenführung:

Wenn wir auch das Feld "Beschreibung auf den Link und es wird Ursprungs sein nur null oder eins Datensatz für jedes Ziel:

Merge in dest TABLA_DESTINO
USING TABLA_ORIGEN ori
Auf (und dest.Descripcion ori.ID dest.ID = = ori. Description)
WENN DANN MATCHED UPDATE SET = a.Descripcion b.Descripcion;

(Dieses Beispiel macht nicht viel Sinn, da die Tabelle ist nur diesen beiden Bereichen und auch die Verknüpfung nicht finden Spiele)

3 -.Verwenden Sie anstelle eines MERGE UPDATE mit JOIN und HINT / * + * BYPASS_UJVC / zum Motor Überspringen der Validierung und Daumen drücken:

UPDATE / * + BYPASS_UJVC * /
(SELECT ori.ID ori_ID,
& Nb
sp; ori.Descripcion ori_Descripcion,
dest.ID dest_ID,
dest_Descripcion dest.Descripcion
VON TABLA_ORIGEN ori, dest TABLA_DESTINO
WHERE ori.ID = dest.ID)
SET dest_Descripcion = ori_Descripcion;

Offensichtlich sind die meisten zu empfehlen sind die ersten oder zweiten, als angemessen.