ODAC при запросе подменяет * на view.*
Приложение на .NET с использованием Oracle.DataAccess обращается к БД Oracle и делает запрос:
SELECT * FROM SHEMA.VIEW
где SHEMA.VIEW - представление.
При этом администратор БД видит запрос так:
SELECT SHEMA.VIEW.* FROM SHEMA.VIEW
Вопрос скорее принципиальный - почему так?
Ответы (1 шт):
Потому, что слой приложения, который отвечает за обмен данными с БД, может изменить и обычно меняет запрос, до его отправки на сервер БД. Тем самым пытаясь, например, улучшить производительность запроса, или привести запрос в соответствие с особенностями конкретного бренда БД.
Так синтаксически правильно:
select * from view1;
А так тоже правильно, но более правильно:
select me.t.* from view1 t;
С указанием полного квалифицированного имени обьекта БД (FQN - fully qualified name) не будет производится поиск идентификаторов в пространстве имён.
администраторы БД в логах хотят видеть запросы в том виде, в каком их задают в ПО
Но их желание необоснованно. Первый запрос разработчику более удобочитаем, чем второй:
select id from someTable;
select someSchemaOfSalesDepartment.someTable.id from someTable;
Разработчик в первую очередь должен заботится, чтобы запрос был понятней, а не как он будет выглядеть на стороне сервера БД.