Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Из-за чего возникает ошибка ORA-01445? / 11 сообщений из 11, страница 1 из 1
04.04.2020, 17:14
    #39943942
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из-за чего возникает ошибка ORA-01445?
Есть такой запрос:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
merge into CC_BONUS_TMP_INSTAGRAM data
using (
select Q.ROWID, ...
, case
    ...
  end as ERROR
from CC_BONUS_TMP_INSTAGRAM Q ...
) rs on (rs.ROWID = data.ROWID)
when matched then
  update set data.ERROR = rs.ERROR
  where rs.ERROR is not null


При его выполнении возникает ошибка.
Версия: Oracle Database 10g Release 10.2.0.4.0 - 64bit Production
Таблица CC_BONUS_TMP_INSTAGRAM это вспомогательная таблица для предварительной пакетной загрузки данных и последующей обработки (без ключей и индексов).
Это баг 4369235? Или неправильный запрос?
...
Рейтинг: 0 / 0
04.04.2020, 17:35
    #39943951
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из-за чего возникает ошибка ORA-01445?
Alibek B.
Или неправильный запрос?
Это проверяется его выполнением.
...
Рейтинг: 0 / 0
04.04.2020, 17:44
    #39943956
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из-за чего возникает ошибка ORA-01445?
Внутренний запрос выполняется успешно.
merge выдает ошибку ORA-01445.
...
Рейтинг: 0 / 0
04.04.2020, 17:46
    #39943957
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из-за чего возникает ошибка ORA-01445?
А вот в таком виде работает нормально:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
merge into CC_BONUS_TMP_INSTAGRAM data
using (
select Q.ROWID as ID, ...
, case
    ...
  end as ERROR
from CC_BONUS_TMP_INSTAGRAM Q ...
) rs on (data.ROWID = rs.ID)
when matched then
  update set data.ERROR = rs.ERROR
  where rs.ERROR is not null
...
Рейтинг: 0 / 0
06.04.2020, 13:06
    #39944237
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из-за чего возникает ошибка ORA-01445?
Код: plsql
1.
2.
3.
update CC_BONUS_TMP_INSTAGRAM
set error = nvl(case ... end, error)
where ...
...
Рейтинг: 0 / 0
06.04.2020, 16:07
    #39944293
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из-за чего возникает ошибка ORA-01445?
andrey_anonymous
Код: plsql
1.
set error =  ... error

Не верю, что не выработалось привычки не переливать из пустого в порожнее.
...
Рейтинг: 0 / 0
06.04.2020, 16:48
    #39944304
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из-за чего возникает ошибка ORA-01445?
Не понял, о чем это, но у меня внутри MERGE довольно сложный запрос с несколькими JOIN, поэтому переделать его на UPDATE я не смогу. Да и ERROR это вычисляемое сложное выражение, в процессе MERGE присваиваемое одноименному столбцу.
...
Рейтинг: 0 / 0
06.04.2020, 17:08
    #39944311
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из-за чего возникает ошибка ORA-01445?
Подобный запрос обусловлен следующим.
CC_BONUS_TMP_INSTAGRAM это вспомогательная таблица, наполняемая из разных источников (в основном ручной ввод).
Время от времени эта таблица обрабатывается.
Вначале запускается приведенный запрос merge, который бракует те данные, которые не соответствуют первичным критериям — у этих строк в поле ERROR вносится причина отклонения записи.
Затем клиент делает из этой таблицы запрос с фильтром where CLOSED is null and ERROR is null и обрабатывает их построчно. При успешной обработке у текущей записи задается CLOSED=sysdate, при неуспешной обработке в поле ERROR сохраняется причина ошибки.
Можно не делать merge, а все проверки делать на клиенте, но ошибок может быть довольно много и многие из них можно отсечь заранее и не гонять между клиентом и БД эти данные.
...
Рейтинг: 0 / 0
06.04.2020, 17:10
    #39944313
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из-за чего возникает ошибка ORA-01445?
Alibek B.
А вот в таком виде работает нормально:


rowid зарезервированное слово, мож из-за етого оракля лихорадит

ошибка странная, я ожидал скорее получить ORA-00918

....
stax
...
Рейтинг: 0 / 0
06.04.2020, 17:15
    #39944314
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из-за чего возникает ошибка ORA-01445?
Да, я уже понял, что дело в имени столбца.
Возможно когда я в соединении указываю rs.ROWID, то Oracle это понимает, как ROWID таблицы rs (а у альяса просто отсутствует физический адрес строки), но вместо специфичной ошибки указывается другая, схожая по смыслу.
...
Рейтинг: 0 / 0
06.04.2020, 17:50
    #39944332
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из-за чего возникает ошибка ORA-01445?
Alibek B.

то Oracle это понимает, как ROWID таблицы rs

так ж не слетает
Код: plsql
1.
2.
3.
SQL> select * from
  2   (select e.*,d.rowid from emp e,dept d where d.deptno=e.deptno) rs join dept dd on (dd.rowid=rs.rowid)
  3  /

но тож дуреет
....
stax
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Из-за чего возникает ошибка ORA-01445? / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]