ORA-00918: столбец неоднозначно указан, но какой столбец?
- Внедрение информационных систем учета и управления
- 16 Июль 2024
Jeff Smith: Мой оригинальный заголовок был: «…но какая, черт возьми, колонка?!?», но мне пришлось изменить его для целей SEO, и, конечно, у некоторых из вас есть маленькие дети.
Это был один из многих примеров, когда наши сообщения об ошибках базы данных Oracle были менее дружелюбны для пользователей или разработчиков.
Давайте рассмотрим пример:
EMPLOYEES и DEPARTMENTS. Обе таблицы имеют поле DEPARTMENT_ID.
Итак, если бы мы запустили этот запрос…
select *
from employees, departments
where department_id = department_id;
База данных бы сказала: «Ну… я не могу так сделать, потому что для вашего условия предиката я не знаю, с каким столбцом department_id вы хотите работать».
Но она бы не сказала нам, что проблема в DEPARTMENT_ID. Она бы сказала что-то вроде этого –
ORA-00918: столбец неоднозначно определен
00918. 00000 - "%s: столбец неоднозначно указан - встречается в %s и %s"
Теперь, это довольно легко понять, когда есть только ОДНО условие предиката, но что, если у вас было… 30 условий предиката? Какое ссылочное поле вызывает проблему???
23ai приносит умные, более понятные сообщения об ошибках
Подождите, а «понятнее» - это слово?
Вот что возвращается при запуске этого же запроса на базе данных 23ai.
ORA-00918: DEPARTMENT_ID: столбец неоднозначно указан - встречается в DEPARTMENTS и EMPLOYEES
Имя столбца, используемое в соединении, было определено в более чем одной таблице и было указано неоднозначно. В >соединении любое имя столбца, которое встречается в более чем одной из таблиц, должно быть указано с префиксом имени >таблицы или псевдонима таблицы при ссылке.
Ошибка на строке: 3, столбец: 23
Я думаю, мы можем субъективно сказать, что это просто лучшее сообщение об ошибке. И строка 3, столбец 23 - это точное место этого идентификатора или столбца.
Официальная документация, 19c против 23ai
Вот удобный справочный сайт, где вы можете увидеть, как выглядят эти сообщения об ошибках ORA «до» и «после», и мы обновили несколько сотен из них, чтобы они были более полезными.