newbie Oracle Update-Anweisung Fehler

stimmen
9

oracle query:

UPDATE AIRMODEL_NETWORK_SUMMARY 
SET CASES_PRODUCED = (SELECT DISTINCT PRDCTN_RUN_ACTL_CASE_QTY
                       FROM AIRMODEL_NETWORK_SUMMARY, HISTORY_PRODUCTION, PERIOD_TO_PROCESS
                      WHERE AIRMODEL_NETWORK_SUMMARY.FSCL_WK_IN_YR_NUM = HISTORY_PRODUCTION.FSCL_WK_IN_YR_NUM 
                        AND AIRMODEL_NETWORK_SUMMARY.FSCL_YR_NUM = HISTORY_PRODUCTION.FSCL_YR_NUM 
                        AND AIRMODEL_NETWORK_SUMMARY.LOC_ID = HISTORY_PRODUCTION.LOC_ID 
                        AND HISTORY_PRODUCTION.FSCL_WK_IN_YR_NUM = PERIOD_TO_PROCESS.FSCL_WK_IN_YR_NUM 
                        AND HISTORY_PRODUCTION.FSCL_YR_NUM = PERIOD_TO_PROCESS.FSCL_YR_NUM);

den folgenden Fehler zurückgibt:

ORA-01427: einreihige Unterabfrage gibt mehr als eine Zeile

Ein weiterer Versuch zur Korrektur:

 MERGE INTO AIRMODEL_NETWORK_SUMMARY AIRMODEL_NETWORK_SUMMARY1 
  USING (SELECT DISTINCT PRDCTN_RUN_ACTL_CASE_QTY, 
           AIRMODEL_NETWORK_SUMMARY2.rowid AS r 
      FROM AIRMODEL_NETWORK_SUMMARY AIRMODEL_NETWORK_SUMMARY2 
           INNER JOIN HISTORY_PRODUCTION 
              ON AIRMODEL_NETWORK_SUMMARY2.FSCL_WK_IN_YR_NUM = HISTORY_PRODUCTION.FSCL_WK_IN_YR_NUM 
                 AND AIRMODEL_NETWORK_SUMMARY2.FSCL_YR_NUM = HISTORY_PRODUCTION.FSCL_YR_NUM 
                 AND AIRMODEL_NETWORK_SUMMARY2.LOC_ID = HISTORY_PRODUCTION.LOC_ID 
           INNER JOIN PERIOD_TO_PROCESS 
              ON HISTORY_PRODUCTION.FSCL_WK_IN_YR_NUM = PERIOD_TO_PROCESS.FSCL_WK_IN_YR_NUM 
                 AND HISTORY_PRODUCTION.FSCL_YR_NUM = PERIOD_TO_PROCESS.FSCL_YR_NUM) 
   ON (AIRMODEL_NETWORK_SUMMARY1.rowid = r) 
 WHEN MATCHED THEN UPDATE 
  SET CASES_PRODUCED = PRDCTN_RUN_ACTL_CASE_QTY;

gibt die folgende Fehlermeldung:

ORA-30926: nicht in der Lage, eine stabile Gruppe von Zeilen in den Quelltabellen zu erhalten

Ich bin ein noob und Hilfe benötigen :(

Danke.

Veröffentlicht am 02/10/2014 um 01:27
vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
2

Sie können nur einen einzigen skalar Wert CASES_PRODUCED zuweisen. So Ihre Unterabfrage benötigt nur einen einzigen skalar Wert zu erzeugen.

Sie müssen herausfinden, warum Ihre Unterabfrage mehr als eine Zeile zurückgibt.

SELECT DISTINCT ...werden eindeutige Zeilen wählen, nicht das gleiche wie ONE ROW.

Benötigen Sie die Summe aller PRDCTN_RUN_ACTL_CASE_QTY in den Reihen?

Oder der Durchschnitt?

Oder die MAX-Nummer?

Oder die erste Zeile?

Verwenden Sie eine Aggregatfunktion, wenn so:

Gesamt

UPDATE AIRMODEL_NETWORK_SUMMARY 
    SET CASES_PRODUCED = (SELECT SUM(PRDCTN_RUN_ACTL_CASE_QTY) ...

Max

UPDATE AIRMODEL_NETWORK_SUMMARY 
    SET CASES_PRODUCED = (SELECT MAX(PRDCTN_RUN_ACTL_CASE_QTY) ...

Durchschnittlich

UPDATE AIRMODEL_NETWORK_SUMMARY 
    SET CASES_PRODUCED = (SELECT AVG(PRDCTN_RUN_ACTL_CASE_QTY) ...

Erste Reihe

UPDATE AIRMODEL_NETWORK_SUMMARY 
    SET CASES_PRODUCED = (SELECT PRDCTN_RUN_ACTL_CASE_QTY ... 
                          FROM ... 
                          WHERE ROWNUM = 1)

Es ist wichtig, vor allem, wenn das Lernen, und kämpft mit Syntax, dass man klar verstehen,

  1. Was Sie brauchen, aus der Abfrage
  2. Was Ihre Frage zurückkehrt

Ich versuche nur, eine Reihe von Alternativen, bis Sie Erfolg bekommen, ist ein sicherer Weg, fehlerhafte Daten zu erstellen, die zu funktionieren scheinen.

Mein Vorschlag ist , zuerst die Unterabfrage kopieren SELECTin ein anderes Fenster und führen Sie es, anzeigen und die Ergebnisse zu verstehen. Es sollte klar sein , dass es ein mehrreihige Ergebnis. Die Arbeit mit der Unterabfrage , bis sie ein korrektes, einzelnes Ergebnis zurückkehren, dann schließen Sie es wieder in die größere Update.

Beantwortet am 02/10/2014 um 01:35
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more