ODAC при запросе подменяет * на view.*

Приложение на .NET с использованием Oracle.DataAccess обращается к БД Oracle и делает запрос:

SELECT * FROM SHEMA.VIEW

где SHEMA.VIEW - представление.

При этом администратор БД видит запрос так:

SELECT SHEMA.VIEW.* FROM SHEMA.VIEW

Вопрос скорее принципиальный - почему так?


Ответы (1 шт):

Автор решения: 0xdb

Потому, что слой приложения, который отвечает за обмен данными с БД, может изменить и обычно меняет запрос, до его отправки на сервер БД. Тем самым пытаясь, например, улучшить производительность запроса, или привести запрос в соответствие с особенностями конкретного бренда БД.

Так синтаксически правильно:

select * from view1;  

А так тоже правильно, но более правильно:

select me.t.* from view1 t;

С указанием полного квалифицированного имени обьекта БД (FQN - fully qualified name) не будет производится поиск идентификаторов в пространстве имён.


администраторы БД в логах хотят видеть запросы в том виде, в каком их задают в ПО

Но их желание необоснованно. Первый запрос разработчику более удобочитаем, чем второй:

select id from someTable;

select someSchemaOfSalesDepartment.someTable.id from someTable;

Разработчик в первую очередь должен заботится, чтобы запрос был понятней, а не как он будет выглядеть на стороне сервера БД.

→ Ссылка