Максим, это да, согласен. Формально SQL-машина выполняет запрос, поэтому мы получаем все плюшки. С другой стороны, пример как раз был именно про PL/SQL- и итерационный вызов. Можно было бы, конечно, в видос добавить, как workaround ;-)
Есть таблица Человек(ИД, Фамилия, Имя); Является ли функция, которая возвращает Человек.Имя || ' ' || Человек.Фамилия по Человек.ИД детерминированной? Т.е. Полное_Имя := Верни_Полное_Имя_По_ИД(Человек.ИД); P.S.: Фактически же функция не вносит изменения в среду, а только делает выборку из таблицы и конкатенирует результат.
Если внутри этой функции выполняется SELECT к таблице, то она не является детерминированной. Она зависит от внешнего источника данных. Если мы в функцию передали Имя и Фамилию. Внутри функции сконкатенировали и вернули результат - она будет детерменированной, т.к. она не выполняет внутри себя select.
Спасибо, полезно и информативно
Если надо в PL/SQL использовать, то делаем какой-нибудь select into или for r in (select...)
Максим, это да, согласен. Формально SQL-машина выполняет запрос, поэтому мы получаем все плюшки. С другой стороны, пример как раз был именно про PL/SQL- и итерационный вызов. Можно было бы, конечно, в видос добавить, как workaround ;-)
Отличный информативный урок. Спасибо
Есть таблица Человек(ИД, Фамилия, Имя); Является ли функция, которая возвращает Человек.Имя || ' ' || Человек.Фамилия по Человек.ИД детерминированной? Т.е. Полное_Имя := Верни_Полное_Имя_По_ИД(Человек.ИД); P.S.: Фактически же функция не вносит изменения в среду, а только делает выборку из таблицы и конкатенирует результат.
Если внутри этой функции выполняется SELECT к таблице, то она не является детерминированной. Она зависит от внешнего источника данных.
Если мы в функцию передали Имя и Фамилию. Внутри функции сконкатенировали и вернули результат - она будет детерменированной, т.к. она не выполняет внутри себя select.
@@OracleDBD , теперь понятно. Спасибо большое!