У меня есть несколько сценариев:Oracle Ref Cursor Vs Выберите в с обработкой исключений
нужно прочитать значение столбца из трех различных таблиц в заранее определенном порядке, и только 1 таблица будет иметь данные
Считывает данные из table1, если записи присутствуют критериев данных еще читать данные из Table2 по заданным критериям
В Oracle хранимые процедуры
Путь они решаются прямо сейчас, чтобы первым получить счетчик для данного запроса в переменную, и если число> 0, то мы выполняем тот же запрос, чтобы прочитать фактические данные как в:
select count(*) from table1 into v_count
if v_count > 0
then
select data into v_data from table1
end if;
Return v_data
Это делается для исключения исключения no_data_found, иначе мне понадобится три блока обработчика исключений, чтобы поймать исключение no_data_found для каждого доступа к таблице.
В настоящее время я реализовав это с помощью курсоров, так что у меня есть что-то вроде этого:
cursor C1 is
select data from table1;
Open C1
Fetch C1 into v_data
if C1%FOUND
then
Close C1
Return v_data
End If
Я хотел узнать, какой из них лучше с точки зрения производительности - один с помощью курсоров, или тот, который выполняет выбор в переменной и имеет три блока исключений no_data_found. Я не хочу использовать двухэтапный процесс запроса, который мы имеем в настоящее время.
Я думал, что Исключения имеют накладные расходы –
Нет - см. http : //stackoverflow.com/questions/350860/how-bad-is-ignoring-oracle-dupvalonindex-exception, где я демонстрирую, что использование исключений работает лучше, чем подсчет, чтобы увидеть, есть ли какие-либо данные. –
Конечно, когда я говорю «нет», я имею в виду отсутствие значительных * накладных расходов, что означает, что их нужно избегать! –