Обложка канала

Oracle Developer👨🏻‍💻

Все о разработке в СУБД "Oracle" SQL, PL/SQL, оптимизация, архитектура, сертификации и многое другое.

Oracle Developer👨🏻‍💻

4 года назад
Открыть в
Ревью функции с курсором Постановка: смотрите пост вторника. Анализ Кратко: я бы такой код не пропустил на ревью. см код выше 1️⃣ Стр 2. Возвращается тип без привязки к колонки таблицы. Нет причин не использовать жесткую привязку к колонке text. 2️⃣ Стр 4. Избыточное объявление курсора. Можно использовать системный тип sys_refcursor. 3️⃣ Стр 13 и 16. Закрывать курсор надо 100%. В штатном режиме он закроется. А вот в случае возникновения исключения - нет закрытия. Ошибка неопытного курсоро-пользователя. Добавляется блок exception с проверкой на открытость курсора и его закрытием if v_curs%is_open then close v_curs; end if; 4️⃣ Но это частности. Основной вопрос к коду: зачем использовать явный курсор? Ответ: не имеет никакого смысла. Код можно переписать, например, так:
function get_text_new(p_id t1.id%type)
return t1.text%type
is
  v_text t1.text%type;
begin
  select max(t1.text)
    into v_text
    from t1 where t1.id = p_id;
   return v_text;
end;
/

▫️В данном варианте, не важно id уникально или нет (как в первом так и во втором будет рендомно отдавать какую-то строку). Есть ли значение по переданному id или нет. Поведение осталось прежним. ▫️Должна ли вызывающая среда знать, о том что строка не найдена? Не имея, каких-либо доп вводных ответить на этот вопрос сложно. ▫️Можно ли использовать result_cache? Определенно сказать сложно. Если таблица t1 постоянно меняется (это не справочник), то нет. Если меняется редко - можно попробовать. Опять же при условии, что тип колонки text проходит по ограничениям result cache. ▫️Если функция используется в SQL, то стоит подумать насчет pragma udf, deterministic (осторожно). Мало чего ясно, но очень хочется понимать? Есть возможность с 9-го сентября ворваться в магию PL/SQL 🎩 Напишите мне, если хотите забронировать место на новый поток. Оплатить можно непосредственно перед стартом. Палец вверх, если задача понравилась. А еще можно перетереть в чатике. #решениезадачи #cursor @oracle_dbd