Есть ли разумная причина, по которой обратная связь об ошибках Oracle не подходит для этого примера?

См. Пример:

ORA-00942: таблица или представление не существует: как найти, о какой таблице или представлении идет речь

Обычно в таком случае Oracle отвечает примерно так: Ошибка SQL: ORA-00942: таблица или представление не существует.

Непонятные сообщения об ошибках от Oracle при использовании ORM-библиотеки, такой как Hibernate, не случаются один раз в жизни. Почему Oracle просто не упоминает ИМЯ таблицы или представления, которых не существует? Почему все аудиторские и другие сложные «решения» размещены в примере вопроса?

Вкратце: есть ли какое-то рациональное, техническое объяснение кажущейся бесполезной обратной связи с ошибками Oracle, или это, скорее, результат отсутствия мотивации (со стороны Oracle) к улучшению из-за их почти «монопольного» статуса популярности? (Или другое? Отсутствие координации с разработчиками ORM и поставщиками БД?)

Фактически, это также вызывает вопрос о том, предоставляют ли другие конкурирующие (особенно OSS) БД какую-либо лучшую обратную связь, о которой я на самом деле понятия не имею, поэтому это может относиться не только к Oracle.


person Manius    schedule 03.10.2010    source источник
comment
Безумная догадка, но если бы они упростили использование системы, им было бы трудно продавать эти дорогостоящие контракты на поддержку.   -  person mikerobi    schedule 03.10.2010
comment
@mikerobi, я не думаю, что люди будут связываться со службой поддержки оракула, чтобы узнать, какого объекта не существует!   -  person Paul Creasey    schedule 03.10.2010
comment
@ Пол Кризи, ты слишком серьезно отнесся ко мне.   -  person mikerobi    schedule 03.10.2010
comment
Я сочувствую и согласен с вами, но на этот вопрос нет ответа, и в результате он может быть закрыт.   -  person skaffman    schedule 03.10.2010
comment
Я знаю, что это было шутливо, но подозреваю, что в этом есть доля правды. Это очень простой пример, но он иллюстрирует случай, когда, казалось бы, не потребовалось бы никаких усилий для значительного улучшения жизни определенных типов разработчиков, но мы все же возвращаемся от Oracle, по сути: что-то пошло не так!   -  person Manius    schedule 03.10.2010
comment
Верно выше, я думаю, нам не разрешено спрашивать, почему в stackoverflow, только как. Какое разочарование...   -  person Manius    schedule 03.10.2010
comment
@Crusader: Может и так, но без этого Stackoverflow.com был бы бесполезен.   -  person skaffman    schedule 03.10.2010
comment
Вы бы случайно не узнали о столь же активном альтернативном сайте по таким вопросам? :)   -  person Manius    schedule 03.10.2010
comment
Фактически, вы можете получить позицию ошибки, а также сообщение, так что вы сможете определить, какое «слово» в запросе имеет в виду Oracle.   -  person Gary Myers    schedule 04.10.2010
comment
Это правда, и это работает, когда вы используете простой sql. Я думаю, что загвоздка здесь в том, что если вы используете ORM lib, например Hibernate, я не знаю способа получить точный и полный sql-оператор, который был выполнен, поэтому я считаю, что такие ошибки по сути бесполезны.   -  person Manius    schedule 06.10.2010


Ответы (2)


Отсутствие имени таблицы, вероятно, помогает предотвратить утечку информации о коде. Типичный пример - если веб-приложение было плохо закодировано, и такая ошибка распространялась на верхний уровень и отображалась пользователю, то Злой человек мог использовать это для SQL-инъекции сайта или выполнения других плохих вещей.

person thecoop    schedule 03.10.2010
comment
Спасибо, думаю, я могу согласиться с этим (по крайней мере, в этом случае). Хотя было бы неплохо иметь «режим отладки» или что-то еще для разработчиков! - person Manius; 03.10.2010

«Вкратце: есть ли какое-то рациональное, техническое объяснение кажущейся бесполезной обратной связи с ошибками Oracle, или это, скорее, результат отсутствия мотивации (со стороны Oracle) к улучшению из-за их почти« монополистического »статуса популярности?»

Имейте в виду, что Oracle - это почитаемая технология, насчитывающая более тридцати лет. Существует огромная сохранившаяся кодовая база. Таким образом, изменение фундаментального поведения может иметь обширные последствия.

Считаете ли вы это «рациональным» или «техническим» объяснением - дело вкуса.

Большинство из нас, кто использует базы данных Oracle, научились жить с его причудами. например, просто показать таблицу, ответственную за ошибку ORA-00942:

prompt Dropping non_existent_table

drop table non_existent_table
/

Это не изящно, но тогда незнание состояния нашей целевой схемы далеко не изящно. Фактически, слепое выполнение операторов DROP TABLE - это мушкетон к управлению схемой.

"это также вызывает вопрос о том, обеспечивают ли другие конкурирующие БД (особенно OSS) лучшую обратную связь"

Конечно, таблица называется эквивалентной ошибкой MySQL, MySQL Error: 1146. Конечно, Oracle теперь владеет MySQL, поэтому его статус как конкурирующей СУБД остается спорным :)

person APC    schedule 03.10.2010
comment
Не управление схемой - начальная генерация схемы для Java-разработчика, у которого есть более важные дела со своим временем, чем ручные скрипты sql, которые можно было бы сгенерировать вместо этого. Тем не менее, возраст продукта и сложность поддержки большой базы кода имеет смысл в качестве объяснения. - person Manius; 04.10.2010
comment
Рассматривали ли вы перебор таблиц в словаре данных, отбрасывая их, вместо того, чтобы вручную поддерживать сценарий? - person Adam Musch; 04.10.2010