αρχάριος μαντείο σφάλμα δήλωση ενημέρωση

ψήφοι
9

μαντείο ερώτημα:

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

επιστρέφει το ακόλουθο μήνυμα λάθους:

ORA-01427: μονής γραμμής υποερώτημα επιστρέφει περισσότερες από μία σειρά

Μια άλλη προσπάθεια διόρθωσης:

 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;

επιστρέφει το ακόλουθο μήνυμα λάθους:

ORA-30926: δε μπορεί να περάσει ένα σταθερό σύνολο των γραμμών στους πίνακες πηγής

Είμαι Noob και χρειάζονται βοήθεια :(

ευχαριστώ.

Δημοσιεύθηκε 02/10/2014 στις 01:27
χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
2

Μπορείτε να ορίσετε μόνο μία, βαθμωτή τιμή να CASES_PRODUCED. Έτσι υποερώτημα σας πρέπει να παράγει μόνο ένα, βαθμωτό αξία.

Θα πρέπει να βρούμε γιατί υποερώτημα σας επιστρέφει περισσότερες από μία γραμμές.

SELECT DISTINCT ...θα επιλέξει μοναδικές σειρές, δεν είναι το ίδιο ONE ROW.

Μήπως θα πρέπει να έχετε το συνολικό άθροισμα όλων των PRDCTN_RUN_ACTL_CASE_QTY στις σειρές;

Ή ο μέσος όρος;

Ή ο αριθμός MAX;

Ή η πρώτη σειρά;

Χρησιμοποιήστε μια συνολική λειτουργία, εάν ναι:

Σύνολο

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

Μέγιστη

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

Μέση τιμή

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

Πρώτη σειρά

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

Είναι κρίσιμο, ειδικά όταν μάθηση, και αγωνίζεται με τη σύνταξη, ότι έχετε κατανοήσει πλήρως

  1. Αυτό που χρειάζεστε από το ερώτημα
  2. Τι ερώτημά σας επιστρέφει

Απλά προσπαθώ μια δέσμη των εναλλακτικών λύσεων, μέχρι να πάρετε την επιτυχία είναι ένας σίγουρος τρόπος για να δημιουργήσει εσφαλμένες δεδομένα που φαίνεται να λειτουργεί.

Η πρότασή μου είναι να αντιγράψετε πρώτα το υποερώτημα SELECTσε ένα διαφορετικό παράθυρο και να το εκτελέσετε, προβολή και κατανόηση των αποτελεσμάτων. Θα πρέπει να είναι σαφές ότι είναι αποτέλεσμα πολλαπλών σειρών. Εργασία με το υποερώτημα μέχρι να επιστρέφει ένα σωστό, μόνο αποτέλεσμα, στη συνέχεια, συνδέστε ξανά στην ευρύτερη ενημέρωση.

Απαντήθηκε 02/10/2014 στις 01:35
πηγή χρήστη

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