Hirdetés

Új hozzászólás Aktív témák

  • nyunyu

    félisten

    válasz Apollo17hu #5214 üzenetére

    Az a baj, hogy az előző lépésben számolt értékre van szükséged a következő kiszámolásához, és nem szimplán szummázod a korábbi értékeket.

    Így vagy rekurzívan számolod ki, vagy ciklust írsz rá.

    Ezekre nem nagyon van szabvány szintaxis, kb. minden DBnek más megoldása van rá.

    Oracle alatt valahogy így nézne ki a ciklusos megoldás:
    DECLARE
    v_id varchar2(10);
    v_ertek number;
    v_korr_ertek number := 0;
    CURSOR c is
    SELECT id, ertek
    FROM proba
    ORDER BY id;
    BEGIN
    OPEN c;
    LOOP
    FETCH c INTO v_id, v_ertek;
    EXIT WHEN c%notfound;
    v_korr_ertek := CASE WHEN v_korr_ertek + v_ertek > 0
    THEN 0
    ELSE v_korr_ertek + v_ertek
    END;
    dbms_output.put_line(v_id || ',' || v_ertek || ',' || v_korr_ertek);
    /*
    UPDATE proba
    SET korr_ertek = v_korr_ertek
    WHERE id = v_id;
    */
    END LOOP;
    CLOSE c;
    END;

    Deklarálsz egy kurzort, amiben azonosító szerint növekvő sorrendben jönnek a rekordok, aztán azon egyesével végig mész, kiszámolva az aktuális korrigált értéket.

Új hozzászólás Aktív témák