ORA-00918: столбец неоднозначно указан, но какой столбец?

Jeff Smith: Мой оригинальный заголовок был: «…но какая, черт возьми, колонка?!?», но мне пришлось изменить его для целей SEO, и, конечно, у некоторых из вас есть маленькие дети.

Это был один из многих примеров, когда наши сообщения об ошибках базы данных Oracle были менее дружелюбны для пользователей или разработчиков.

Давайте рассмотрим пример:

EMPLOYEES и DEPARTMENTS. Обе таблицы имеют поле DEPARTMENT_ID.

1.png

Итак, если бы мы запустили этот запрос…

select *
from employees, departments
where department_id = department_id;

База данных бы сказала: «Ну… я не могу так сделать, потому что для вашего условия предиката я не знаю, с каким столбцом department_id вы хотите работать».

Но она бы не сказала нам, что проблема в DEPARTMENT_ID. Она бы сказала что-то вроде этого –

ORA-00918: столбец неоднозначно определен
00918. 00000 - "%s: столбец неоднозначно указан - встречается в %s и %s"

Теперь, это довольно легко понять, когда есть только ОДНО условие предиката, но что, если у вас было… 30 условий предиката? Какое ссылочное поле вызывает проблему???

23ai приносит умные, более понятные сообщения об ошибках

Подождите, а «понятнее» - это слово?

Вот что возвращается при запуске этого же запроса на базе данных 23ai.

2.png

ORA-00918: DEPARTMENT_ID: столбец неоднозначно указан - встречается в DEPARTMENTS и EMPLOYEES
Имя столбца, используемое в соединении, было определено в более чем одной таблице и было указано неоднозначно. В >соединении любое имя столбца, которое встречается в более чем одной из таблиц, должно быть указано с префиксом имени >таблицы или псевдонима таблицы при ссылке.
Ошибка на строке: 3, столбец: 23

Я думаю, мы можем субъективно сказать, что это просто лучшее сообщение об ошибке. И строка 3, столбец 23 - это точное место этого идентификатора или столбца.

3.png

Официальная документация, 19c против 23ai

Вот удобный справочный сайт, где вы можете увидеть, как выглядят эти сообщения об ошибках ORA «до» и «после», и мы обновили несколько сотен из них, чтобы они были более полезными.

4.png

Источник