újszülött oracle frissítés nyilatkozat hiba

szavazat
9

oracle lekérdezés:

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

visszatér a következő hibaüzenet jelenik meg:

ORA-01427: egysoros allekérdezés több sort

Egy másik kísérlet a korrekció:

 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;

után a következő hibaüzenet jelenik meg:

ORA-30926: nem tudja, hogy egy stabil halmaza sorok a forrás táblázatok

Vagyok a noob, és segítségre van szüksége :(

köszönöm.

A kérdést 02/10/2014 01:27
felhasználó
Más nyelveken...                            


1 válasz

szavazat
2

Meg lehet rendelni egyetlen skalár értéket CASES_PRODUCED. Tehát a segédlekérdezés kell termelni csak egyetlen skalár értéket.

Meg kell találni, hogy miért a allekérdezés több sort.

SELECT DISTINCT ...majd válassza ki egyedi sorokat, nem ugyanaz, mint ONE ROW.

Van szüksége az összessége a PRDCTN_RUN_ACTL_CASE_QTY a sorok?

Vagy az átlag?

Vagy a MAX szám?

Vagy az első sorban?

Összesítő függvényt használjuk, ha igen:

Teljes

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

Átlagos

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

Első sor

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

Rendkívül fontos, különösen, ha a tanulás, és küzd szintaxist, hogy világosan megértse

  1. Amire szüksége van a lekérdezés
  2. Mi a lekérdezés visszatér

Csak próbálok egy csomó alternatíva, amíg nem kap a siker biztos tüzet módja annak, hogy hibás adatokat, hogy úgy tűnik, hogy működik.

A véleményem az, hogy az első példányt a allekérdezés SELECTegy másik ablakot, és futtatni, megtekintheti és megértsék az eredményeket. Világossá kell tenni, hogy ez egy többsoros eredményt. Munka a allekérdezés, amíg visszatér a helyes, egyetlen eredményt, majd dugja vissza a nagyobb frissítés.

Válaszolt 02/10/2014 01:35
a forrás felhasználó

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