PL / SQL: ОБНОВЛЕНИЕ внутри CURSOR, но некоторые данные имеют значение NULL - PullRequest
0 голосов
/ 26 марта 2009

Я все еще изучаю некоторые различия PL / SQL, так что это может быть простой вопрос, но ... вот так.

У меня есть курсор, который захватывает кучу записей с несколькими полями. Затем я запускаю два отдельных оператора SELECT в цикле LOOP из результатов курсора, чтобы получить некоторые расстояния и рассчитать эти расстояния. Они отлично работают.

Когда я иду, чтобы обновить таблицу новыми значениями, моя проблема состоит в том, что есть четыре части определенных критериев.

update work
        set kilometers = calc_kilo,
            kilo_test = test_kilo                                  
        where lc = rm.lc
        AND ld = rm.ld
        AND le = rm.le
        AND lf = rm.lf
        AND code = rm.code
        AND lcode = rm.lcode
        and user_id = username;

Моя проблема в том, что это обновление редко, потому что rm.lf и rm.le имеют значения NULL в базе данных. Как с этим бороться и создать правильное обновление.

Ответы [ 3 ]

2 голосов
/ 26 марта 2009

Если я правильно вас понимаю, вы хотите сопоставить lf с rm.lf, в том числе, когда они оба равны нулю? Если это то, что вы хотите, то это сделает это:

...
AND (lf = rm.lf 
  OR (lf IS NULL AND rm.lf IS NULL)
)
... 

Он сравнивает значения lf и rm.lf, которые возвращают false, если любой из них равен нулю, поэтому условие OR возвращает true, если они оба равны null.

1 голос
/ 26 марта 2009

У меня есть курсор, который захватывает кучу записей с несколькими полями. Затем я запускаю два отдельных оператора SELECT в цикле LOOP из результатов курсора, чтобы получить некоторые расстояния и рассчитать эти расстояния. Они отлично работают.

Когда я иду, чтобы обновить таблицу новыми значениями, моя проблема состоит в том, что есть четыре части определенных критериев.

Первое, на что я бы обратил внимание, - это не использование курсора для чтения данных, а затем для расчетов и обновления. В 99% случаев быстрее и проще запускать обновления, которые делают все это за один шаг

0 голосов
/ 15 августа 2012
update work 
        set kilometers = calc_kilo, 
            kilo_test = test_kilo                                   
        where lc = rm.lc 
        AND ld = rm.ld 
        AND NVL(le,'x') = NVL(rm.le,'x') 
        AND NVL(lf,'x') = NVL(rm.lf,'x') 
        AND code = rm.code 
        AND lcode = rm.lcode 
        and user_id = username;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...