Keresés

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

  • bpx

    őstag

    válasz Iginotus #3660 üzenetére

    Az egy nem correlated subquery (magyarul még szebb: korrelált allekérdezés), ezért ami belül van, az egyszer lefut, és kívül mindenhova az ott kapott értéket használja. Lehet belőle correlated subquery-t csinálni valami értelmetlen feltétellel és akkor majd miden sorra újból kiértékelődik. Persze ez nem szép és kapásból odaírnám kommentbe, hogy ez miért van belegányolva. Vagy marad a ciklus, amit már első ránézésre is el lehet olvasni.

    create table forge (row_id, code_neu) as select rownum, 0 from dual connect by level <= 10;
    create table oe (orgeh_code) as select rownum from dual connect by level <= 4;

    select * from forge;

    ROW_ID CODE_NEU
    ---------- ----------
    1 0
    2 0
    3 0
    4 0
    5 0
    6 0
    7 0
    8 0
    9 0
    10 0

    select * from oe;

    ORGEH_CODE
    ----------
    1
    2
    3
    4


    update forge set code_neu =
    (
    select orgeh_code from oe
    ----
    where forge.row_id = forge.row_id
    ----
    order by dbms_random.value fetch first 1 row only
    )
    where row_id between 1 and 9;

    select * from forge;

    ROW_ID CODE_NEU
    ---------- ----------
    1 1
    2 3
    3 1
    4 2
    5 1
    6 1
    7 4
    8 3
    9 4
    10 0

  • velizare

    nagyúr

    válasz Iginotus #3660 üzenetére

    meh. egy frappáns tsql-es megoldás jutott eszembe erre, ott a newid-t checksumozva generáltunk egy random számot, amit a megfelelő méretűre faragtunk. de ez persze nem igazi random. oracle-ben a sys_guid() csinál hasonlót.
    mondjuk én olyan állat vagyok, aki sqlben nem ír ciklust, mert tiltja a vallása.

    Tudod, mit jelent az, hogy nemezis? Az érintett, erősebb fél kinyilatkoztatása a méltó büntetés mértékét illetően. Az érintett fél jelen esetben egy szadista állat... én.

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