powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Из-за чего возникает ошибка ORA-01445?
11 сообщений из 11, страница 1 из 1
Из-за чего возникает ошибка ORA-01445?
    #39943942
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такой запрос:
Код: 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
Из-за чего возникает ошибка ORA-01445?
    #39943951
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.
Или неправильный запрос?
Это проверяется его выполнением.
...
Рейтинг: 0 / 0
Из-за чего возникает ошибка ORA-01445?
    #39943956
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Внутренний запрос выполняется успешно.
merge выдает ошибку ORA-01445.
...
Рейтинг: 0 / 0
Из-за чего возникает ошибка ORA-01445?
    #39943957
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот в таком виде работает нормально:
Код: 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
Из-за чего возникает ошибка ORA-01445?
    #39944237
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
update CC_BONUS_TMP_INSTAGRAM
set error = nvl(case ... end, error)
where ...
...
Рейтинг: 0 / 0
Из-за чего возникает ошибка ORA-01445?
    #39944293
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
Код: plsql
1.
set error =  ... error

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


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

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

....
stax
...
Рейтинг: 0 / 0
Из-за чего возникает ошибка ORA-01445?
    #39944314
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, я уже понял, что дело в имени столбца.
Возможно когда я в соединении указываю rs.ROWID, то Oracle это понимает, как ROWID таблицы rs (а у альяса просто отсутствует физический адрес строки), но вместо специфичной ошибки указывается другая, схожая по смыслу.
...
Рейтинг: 0 / 0
Из-за чего возникает ошибка ORA-01445?
    #39944332
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
11 сообщений из 11, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Из-за чего возникает ошибка ORA-01445?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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