Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 ОБработка пустых строк  [new]
tinky2003
Member

Откуда:
Сообщений: 3
Коллеги, подскажите, плиз - генерирую скрипт где много однотипных апдейтов типа:
UPDATE таблица1 SET (поле1, поле2, поле3) =
( Внутренний запрос )
WHERE условие фильтрации конкретной записи


В некоторых случаях внутренний запрос возвращает 0 строк, а на поле1,2,3 - ограничение NOT NULL. Соответсвенно возникает ошибка - ORA-01407: cannot update (field) to null. Вопрос - какми образом можно отловить ситуацию когда внутренний запрос ничего не возвращает?
31 мар 06, 09:33    [2509613]     Ответить | Цитировать Сообщить модератору
 Re: ОБработка пустых строк  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 63961
Блог
И что Вы собираетесь делать с этим отловленным результатом? Спросонья я бы предложил обернуть поля внутреннего запроса в агрегатные функции, например MAX, и взять от них coalesce для подстановки дефолтового значения.
31 мар 06, 09:38    [2509626]     Ответить | Цитировать Сообщить модератору
 Re: ОБработка пустых строк  [new]
Ненавижу регистрацию
Member

Откуда:
Сообщений: 260
UPDATE таблица1 SET (поле1, поле2, поле3) = 
( Внутренний запрос ) 
WHERE условие фильтрации конкретной записи
    and exists ( Внутренний запрос )
31 мар 06, 09:38    [2509627]     Ответить | Цитировать Сообщить модератору
 Re: ОБработка пустых строк  [new]
tinky2003
Member

Откуда:
Сообщений: 3
Сэнькс э лот.
31 мар 06, 09:51    [2509681]     Ответить | Цитировать Сообщить модератору
 Re: ОБработка пустых строк  [new]
Двоюшник
Member

Откуда: Киев
Сообщений: 1135
update
(select 
    t.поле1, t.поле2, t.поле3,
    s.поле1 s_поле1, s.поле2 s_поле2, s.поле3 s_поле3
 from 
   таблица1 t,
   (внутренний запрос) s
 where (условие выбора конкретной записи) and
    (условие связывания подзапроса с таблицей, если есть))
set
  поле1 = s_поле1,
  поле2 = s_поле2,
  поле3 = s_поле3
Но есть много ограничений...

---
Ну ты заходи ежели чё...
31 мар 06, 11:40    [2510343]     Ответить | Цитировать Сообщить модератору
 Re: ОБработка пустых строк  [new]
Колобок
Member

Откуда:
Сообщений: 122
10g
MERGE INTO таблица1 t
     USING ( Внутренний запрос без условий соединения ) q
        ON ( условия содинеия из внутреннего запроса )
WHEN MATCHED THEN
  UPDATE SET t.поле1 = q.поле1,
             t.поле2 = q.поле2,
             t.поле3 = q.поле3
  WHERE условие фильтрации конкретной записи
31 мар 06, 12:30    [2510726]     Ответить | Цитировать Сообщить модератору
 Re: ОБработка пустых строк  [new]
Двоюшник
Member

Откуда: Киев
Сообщений: 1135
Колобок
10g
MERGE INTO таблица1 t
     USING ( Внутренний запрос без условий соединения ) q
        ON ( условия содинеия из внутреннего запроса )
WHEN MATCHED THEN
  UPDATE SET t.поле1 = q.поле1,
             t.поле2 = q.поле2,
             t.поле3 = q.поле3
  WHERE условие фильтрации конкретной записи

Хорошее решение.
Но есть ограничение в
ON ( условия содинеия из внутреннего запроса )
не должно быть изменяемых полей...
31 мар 06, 12:38    [2510778]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить