Declarație de actualizare în Oracle PL/SQL care actualizează valorile la nul (Programare, Mysql)

Rajesh Kumar a intrebat.
UPDATE FD DCS
  SET DCS.F_DISTANCE =
    (SELECT FD.F_DISTANCE
    FROM TMP FD
    WHERE FD.DATE_SID = DCS.DATE_SID
    AND FD.SID = DCS.SID
    AND FD.DA_SID = DCS.DASID
    AND FD.AA_SID = DCS.AA
    AND FD.F_DISTANCE IS NOT NULL
    )
WHERE DCS.BATCH_ID=BATCH_ID;

Interogarea interioară SQl actualizează toate valorile satisfăcute în coloana F_distance a tabelului FD, dar în cazul în care subinterogarea nu se potrivește, actualizează valorile tabelului FD F_Distance la zero. Nu vreau să actualizez valorile la zero. vă rog să-mi sugerați ce să fac.

Comentarii

  • Oracle sau MySql ? nu este același lucru –  > Por scaisEdge.
1 răspunsuri
scaisEdge

În ORACLE puteți utiliza NVL

UPDATE FD DCS
SET DCS.F_DISTANCE = NVL(
  (SELECT FD.F_DISTANCE
  FROM TMP FD
  WHERE FD.DATE_SID = DCS.DATE_SID
  AND FD.SID = DCS.SID
  AND FD.DA_SID = DCS.DASID
  AND FD.AA_SID = DCS.AA
  AND FD.F_DISTANCE IS NOT NULL
  ), DCS.F_DISTANCE)
WHERE DCS.BATCH_ID=BATCH_ID;

În acest caz dacă rezultatul este null NVL-ul returnează 0 (se poate schimba cu valoarea pe care o preferați)

Comentarii

  • Mulțumesc pentru răspuns, dar coloana DCS.F_DISTANCE are deja câteva valori numerice în loc de 0, trebuie să le salvez pentru a nu deveni nule. –  > Por Rajesh Kumar.
  • Dacă înțeleg corect, dacă valoarea este nulă, doriți valoarea anterioară… atunci am actualizat răspunsul… sper că este util –  > Por scaisEdge.

Tags: