Это может сработать. База данных разрешит различия в типах данных, приведя DEPTNO к VARCHAR2. Это предотвратит использование оптимизатором любого (нормального) индекса, который у вас есть для этого столбца. В зависимости от объемов и распределения данных индексированное чтение не всегда может быть наиболее эффективным путем доступа, и в этом случае преобразование данных не имеет значения.
Так что зависит. Но каковы ваши варианты, если это имеет значение (у вас есть очень избирательный индекс для этого столбца)?
Одним из решений было бы применить явное преобразование данных в вашем запросе:
select * from table
where deptno = to_number(a);
Это приведет к сбою запроса, если A содержит значение, которое не будет преобразовано в число.
Лучшим решением было бы изменить тип данных A, чтобы вызывающая программа могла передавать только числовое значение. Это возлагает ответственность за фиктивные данные туда, где они должны быть.
Наименее привлекательное решение состоит в том, чтобы оставить сигнатуру процедуры и запрос как есть и построить для столбца функциональный индекс:
create index emp_deptchar_fbi on emp(to_char(deptno));
Прочтите документацию, чтобы узнать больше об индексах на основе функций< /а>.
person
APC
schedule
04.07.2013