nybegynner orakel oppdatering statement feil

stemmer
9

orakel spørring:

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);

returnerer følgende feil:

ORA-01427: enrads delspørring returnerer mer enn én rad

Et annet forsøk på korreksjon:

 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;

returnerer følgende feil:

ORA-30926: ute av stand til å få et stabilt sett med rader i kildetabellene

Jeg er en noob og trenger hjelp :(

Takk skal du ha.

Publisert på 02/10/2014 klokken 00:27
bruker
På andre språk...                            


1 svar

stemmer
2

Du kan tildele bare en enkelt, skalar verdi til CASES_PRODUCED. Så din Delspørringen trenger for å produsere bare en enkelt, skalar verdi.

Du må finne hvorfor delspørring returnerer mer enn én rad.

SELECT DISTINCT ...vil velge unike rader, ikke det samme som ONE ROW.

Trenger du summen av alle PRDCTN_RUN_ACTL_CASE_QTY i radene?

Eller gjennomsnittlig?

Eller MAX nummer?

Eller den første raden?

Bruk en samlefunksjon så fall:

Total

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) ...

Gjennomsnitt

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

Første rad

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

Det er kritisk, spesielt når man lærer, og sliter med syntaks, at du forstår

  1. Det du trenger fra spørringen
  2. Hva forespørselen din retur

Prøver bare en haug med alternativer til du får suksess er en sikker brann måte å skape feilaktige data som synes å fungere.

Mitt forslag er å først kopiere delspørringen SELECTtil et annet vindu og kjøre den, vise og forstå resultatene. Det bør være klart at det er en multi-rad resultat. Arbeid med delspørringen før det er tilbake en korrekt, enkelt resultat, og koble den tilbake i større oppdatering.

Svarte 02/10/2014 kl. 00:35
kilden bruker

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