acemi oracle güncelleme bildirimi hatası

oy
9

oracle sorgusu:

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

Aşağıdaki hata veriyor:

ORA-01.427: Tek sıralı alt sorgu birden fazla satır döndürür

düzeltme başka bir girişimi:

 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;

Aşağıdaki hata döndürür:

ORA-30926: kaynak tablolardaki satır istikrarlı bir set alamadı

Ben çaylak değilim ve yardıma ihtiyacı :(

teşekkür ederim.

Oluştur 02/10/2014 saat 01:27
kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
2

Sen CASES_PRODUCED yalnızca tek, skaler değer atayabilirsiniz. Yani alt sorgu yalnızca tek, skaler değer üretmek gerekiyor.

Eğer alt sorgu birden fazla satır döndürür neden bulmalıyız.

SELECT DISTINCT ...aynı değildir benzersiz satırları seçecektir ONE ROW.

Eğer satırlardaki tüm PRDCTN_RUN_ACTL_CASE_QTY toplamını gerekir mi?

Ya da ortalama?

Veya MAX numara?

Ya da ilk sıra?

eğer öyleyse bir toplama işlevi kullanın:

Genel Toplam

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

maksimum

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

Ortalama

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

İlk sıra

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

öğrenme ve sözdizimi ile mücadele zaman açıkça anlamak, özellikle, kritiktir

  1. Eğer sorgudan gerekenler
  2. Ya sorgu dönüyor

Eğer başarı iş gibi görünüyor hatalı veri oluşturmak için emin bir yangın yoludur elde edene kadar sadece alternatiflerin bir demet çalışıyor.

Benim önerim ilk alt sorgu kopyalamak için SELECTfarklı bir pencereye ve görünümü çalıştırın ve sonuçları anlamak. Bir çok sıralı sonucu olduğunu O açık olmalıdır. Bir doğru, tek bir sonuç dönüyor kadar alt sorgu ile çalışma, daha sonra daha geniş güncelleme geri takın.

Cevap 02/10/2014 saat 01:35
kaynak kullanıcı

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