При обновлении Oracle 10.2.0.4 -> 11gR2 неожиданно сталкиваемся с интересной ошибкой:
11.2.0.3@SQL> select group_id 2 from (select user_mode.group_id 3 from USERS_LIST U 4 inner join user_state 5 on user_state.user_id = U.user_id 6 inner join user_mode 7 on user_mode.mode_id = user_state.mode_id 8 where USER_STATUS_ID = 1 9 and USER_ID = 87960018 10 order by user_mode.group_id desc) 11 where rownum < 2 12 / and USER_ID = 87960018 * ERROR at line 9: ORA-00918: column ambiguously defined
- ошибка вполне справедливая – столбец USER_ID действительно присутствует в двух таблицах, соединяемых в запросе с использованием ANSI варианта INNER JOIN.
Но в версии 10.2 тот же запрос безошибочно выполняется!
10.2.0.4@SQL> select group_id 2 from (select user_mode.group_id 3 from USERS_LIST U 4 inner join user_state 5 on user_state.user_id = U.user_id 6 inner join user_mode 7 on user_mode.mode_id = user_state.mode_id 8 where USER_STATUS_ID = 1 9 and USER_ID = 87960018 10 order by user_mode.group_id desc) 11 where rownum < 2 12 / GROUP_ID ---------- 8 1 row selected.
Как описывается в Query Fails With Ora-00918 After Upgrade to 11g [ID 835701.1] изменение это – ожидаемое и сделано в качестве исправления бага: в версии 10.2 некоторые честные пользователи жаловались на то, что при использовании ANSI JOIN ошибка ORA-918 как раз не выдавалась при использовании неточно определённого (ambiguously defined) стобца!

