Использование select *
в вашем коде - это то, что я бы назвал ленивым программированием с несколькими неприятными побочными эффектами. Степень, с которой вы испытываете эти побочные эффекты, будет отличаться, но она никогда не бывает положительной.
Я буду использовать некоторые из пунктов, уже упомянутых в других ответах, но не стесняйтесь редактировать мой ответ и добавить еще несколько отрицательных моментов по поводу использования select *
.
Вы отправляете больше данных из механизма SQL в ваш код, чем необходимо, что отрицательно влияет на производительность.
Информация, которую вы получаете, должна быть помещена в переменные (например, в переменную записи). Это займет больше памяти PGA, чем необходимо.
Используя select *
, вы никогда не будете использовать только индекс для получения требуемой информации, вам всегда придется также посещать таблицу (при условии, что не существует индекса, который содержит все столбцы таблицы). Опять же, с отрицательным влиянием на производительность.
Менее понятно для людей, которые поддерживают ваш код, каково ваше намерение. Им нужно углубиться в код, чтобы определить все вхождения вашей переменной записи, чтобы узнать, что извлекается.
Вы не будете использовать функции SQL для выполнения вычислений, но всегда будете полагаться на вычисления PL / SQL или Java. Возможно, вам не хватает некоторых значительных улучшений SQL, таких как аналитические функции, предложение модели, рекурсивный факторинг подзапросов и т. П.
Начиная с Oracle11, зависимости отслеживаются на уровне столбцов. Это означает, что при использовании select *
ваш код помечается в словаре данных как «зависимый от всех столбцов» этой таблицы. Ваша процедура будет признана недействительной, если что-то случится с одним из этих столбцов. Поэтому использование select * означает, что ваш код будет признан недействительным чаще, чем необходимо.
Опять же, не стесняйтесь добавлять свои собственные очки.