У меня есть запрос, который отлично работает в MySQL, но когда я запускаю его в Oracle, я получаю следующую ошибку:
SQL Error: ORA-00933: SQL command not properly ended
00933. 00000 - "SQL command not properly ended"
Запрос:
update branch_policy bp
join (select
po.id as old_id,
pn.new_id
from policy po
join (
select
policy_number,
provider_id,
min(id) as new_id
from policy
group by policy_number, provider_id) as pn
on po.policy_number = pn.policy_number
and po.provider_id = pn.provider_id) as p
on bp.policy_id = p.old_id
set bp.policy_id = p.new_id
;
-1
jagadeesh reddy
21 Апр 2020 в 07:21
В вопросах кода укажите минимальный воспроизводимый пример - вырезать и вставить и запустить код, включая наименьший типичный пример ввода как код; желаемый и фактический результат (включая дословные сообщения об ошибках); теги и версии; четкая спецификация и объяснение. Назовите наименьшее количество кода, который вы можете дать, это код, который вы показываете "ОК", расширенный кодом, который вы показываете "Неверно". (Основы отладки.) Для SQL, который включает СУБД и DDL (включая ограничения и индексы) и ввод в виде кода, отформатированного в виде таблицы. Как задать вопрос Перестаньте пытаться кодировать свою общую цель и объясните, что вы вместо этого ожидали от данного кода и почему.
– philipxy
21 Апр 2020 в 08:04
Прежде чем рассматривать публикацию, прочитайте руководство и погуглите любое сообщение об ошибке или множество четких, кратких и точных формулировок вашего вопроса/проблемы/цели, с вашими конкретными строками/именами и без них, а также с тегами site:stackoverflow.com и; прочитал много ответов. Если вы публикуете вопрос, используйте одну фразу в качестве заголовка. Отразите свое исследование. См. раздел Как задать вопрос и тексты при наведении указателя мыши на стрелку голосования.
– philipxy
21 Апр 2020 в 08:06
Oracle SQL не поддерживает синтаксис соединения ANSI SQL 92 для операторов DML. Я согласен, что было бы здорово, если бы это было так. Связанный вопрос показывает различные способы обойти это ограничение.
– APC
21 Апр 2020 в 09:00
1 ответ
Это поможет?
update branch_policy bp set
bp.policy_id = (select pn.new_id
from (select policy_number, provider_id, nin(id) new_id
from policy
group by policy_number, provider_id
) pn join policy po on po.policy_number = pn.policy_number
and po.provider_id = pn.provider_id
)
where bp.policy_id in (select po.id
from (select policy_number, provider_id, nin(id) new_id
from policy
group by policy_number, provider_id
) pn join policy po on po.policy_number = pn.policy_number
and po.provider_id = pn.provider_id
);
0
Littlefoot
21 Апр 2020 в 09:11
Привет, спасибо за ваш быстрый ответ, но это решение не работает, потому что мы не можем обновить столбцы, которые используются в предложении on, **38104. 00000 «Столбцы, указанные в пункте ON, не могут быть обновлены: %s» **
– jagadeesh reddy
21 Апр 2020 в 09:02
Ах, да... глупый я. Тратил время на то, чтобы понять, что и куда, вместо обдумывания того, что я делаю. Извиняюсь. Я попытался переписать его в UPDATE; Посмотрите, пожалуйста.
– Littlefoot
21 Апр 2020 в 09:11
Привет, этот запрос на обновление выдает ошибку типа ORA-01427: однострочный подзапрос возвращает более одной строки
– jagadeesh reddy
21 Апр 2020 в 10:16
Это как-то связано с данными (дубликатами) или условиями соединения в подзапросе, который возвращает NEW_ID. Простым вариантом может быть SELECT DISTINCT PN.NEW_ID. В противном случае вам придется проверить, почему он вернул более одного значения.
– Littlefoot
21 Апр 2020 в 10:37
Привет @Littlefoot, прежде чем вы дали один правильный сценарий слияния, который работает нормально, если мы немного изменим сценарий в конце, например, ВКЛ (1 = 1), КОГДА совпало, ТО ОБНОВИТЬ УСТАНОВИТЬ bp.id = p.new_id ГДЕ bp. id = p.old_id. Большое спасибо за Вашу помощь
– jagadeesh reddy
21 Апр 2020 в 17:18
Похожие вопросы
Связанные вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.