DETERMINISTIC: детерминированные функции в PL/SQL на примере

Vovan_ST

Vovan_ST

ИТ специалист со стажем. Автор статьи. Профиль

DETERMINISTIC в PL/SQLФункция называется детерминированной, если при одном наборе параметров IN и IN OUT она всегда возвращает одно и то же значение. Отличительной чертой детерминированных функций является отсутствие побочных эффектов: все изменения, вносимые программой, отражаются в списке параметров.

Пример детерминированной функции, которая представляет собой простую инкапсу­ляцию substr:

 

 

 

FUNCTION betwnstr (
   string_in IN VARCHAR2, start_in IN PLS_INTEGER, end_in IN PLS_INTEGER)
   RETURN VARCHAR2 IS 
BEGIN
   RETURN (SUBSTR (string_in, start_in, end_in - start_in + 1));
END betwnstr;

Если при вызове функции передаются, например, строка «abcdef» (string_in), число 3 (start_in) и 5 (end_in), то сколько бы раз вы ни вызывали функцию betwnStr с этим на­бором параметров, она всегда будет возвращать строку «cde». Тогда почему бы Oracle не сохранить результат, связанный с конкретным набором аргументов? Ведь при следующем вызове функции с теми же параметрами можно получить результат, не выполняя код функции! Чтобы добиться подобного эффекта, включите предложение DETERMINISTIC в заголовок функции:

FUNCTION betwnstr (
   string_in IN VARCHAR2, start_in IN PLS_INTEGER, end_in IN PLS_INTEGER)
   RETURN VARCHAR2 DETERMINISTIC

Решение об использовании сохраненной копии возвращаемого результата (если такая копия доступна) принимается оптимизатором запросов Oracle. Сохраненные копии могут браться из материализованного представления, функционального индекса или повторного вызова одной функции в команде SQL.

Функция должна быть объявлена с ключевым словом DETERMINISTIC, чтобы она могла вызываться в выражении функционального индекса или из запроса материализованного представления с пометкой REFRESH FAST или ENABLE QUERY REWRITE. Кроме того, кэширование входных данных и результатов детерминированной функции выполняется только тогда, когда функция вызыва­ется в команде SQL.

Детерминированная функция может улучшить производительность команд SQL, вы­зывающих такие функции. В Oracle нет надежного способа проверки отсутствия побочных эффектов у функций, объявленных детерминированными. Поэтому при использовании таких функций вся ответственность за последствия возлагается на программиста. Детерминированная функция не должна основываться на переменных пакета и иметь право изменять ре­зультирующие значения в базе данных.

Эффект от использования детерминированных функций (и их ограничения) продемон­стрирован в файле deterministic.sql.

Вас заинтересует / Intresting for you:

Управление приложениями PL/SQL...
Управление приложениями PL/SQL... 4634 просмотров Stas Belkov Thu, 16 Jul 2020, 06:20:48
Встроенные методы коллекций PL...
Встроенные методы коллекций PL... 14740 просмотров sepia Tue, 29 Oct 2019, 09:54:01
Символьные функции и аргументы...
Символьные функции и аргументы... 18546 просмотров Анатолий Wed, 23 May 2018, 18:54:01
Тип данных RAW в PL/SQL
Тип данных RAW в PL/SQL 12240 просмотров Doctor Thu, 12 Jul 2018, 08:41:33
Печать
Войдите чтобы комментировать

Xima84 аватар
Xima84 ответил в теме #9404 4 года 11 мес. назад
ссылка на файл не работает
apv аватар
apv ответил в теме #9293 5 года 4 мес. назад
Хорошее описание DETERMINISTIC. Коротко и по делу все.