2015-11-18 3 views
0

Почему мой оператор обновления говорит - «не может вставить нуль в gitb_auto_debit_upload.status». Второй запрос возвратил запись, где столбец process_status имел значение «P» в качестве значения.Обновить столбец на основе столбца из другой таблицы

Update gitb_auto_debit_upload a 
       set status = (select nvl(process_status,'O') from gitb_daily_log b 
       where b.interface_code  = 'PHP661OW' 
        and b. process_ref_no = '4708' 
        and a.refno       = b.external_ref_no 
        and a.recordno     = b. seq_no 
      ) ; 




    select * from gitb_auto_debit_upload a, gitb_daily_log b where b.interface_code  = 'PHP661OW' 
        and b. process_ref_no = '4708' 
        and a.refno       = b.external_ref_no 
        and a. recordno     = b. seq_no 

ответ

0

Сообщение об ошибке приходит из записи в gitb_auto_debit_upload, для которого выберите (один внутри обновления) оператор возвращает ни в одной строке.

Ваш оператор обновления обрабатывает все записи gitb_auto_debit_upload. Ваш выбор (тот, который вы используете для проверки значения состояния) содержит только те записи, для которых существует запись в gitb_daily_log.

Вам нужно изменить инструкцию обновления, чтобы либо обновлять только те строки, для которых select возвращает строку или поместить NVL() вокруг выбора.

+0

Спасибо. Теперь я понимаю. –

Смежные вопросы