да это просто пример, на самом деле там таблица из которой нужно вытащить дату. Я сначала думал что проблема в этом, заменил на sysdate проблема осталась
это вообще плохо с точки зрения консистентности: если не сделать оператор на нее, то согласованность данных основного запроса и запросов внутри функции будут на разные SCN (разное время)
А что значит оператор на нее?
пример: http://orasql.org/2014/03/31/deterministic-functions-result_cache-and-operators/ create or replace function f3(x varchar2) return number result_cache deterministic as r number; begin select id into r from t3; p3_update; return r; end; / create or replace operator o3 binding(varchar2) return number using f3 /
про согласованность: http://orasql.org/2019/12/30/pl-sql-functions-and-statement-level-consistency/
Благодарю. Блин целая наука этот оракл....
Я правильно понимаю что согласованность данных умеет делать только оператор? deterministic - не делает согласованность? (судя по примерам)
Да. Но детерминистик или скалярный подзапрос хотя бы возвращает одно и то же значение в случае срабатывания кэширования или попадания в access predicates
Тут подробнее: http://orasql.org/category/oracle/deterministic-functions/
кстати, а есть объяснение, почему обычному plsql не прикрутили согласованность?
Pl/sql это грубо говоря просто так клиент
Понятно, спасибо.
Обсуждают сегодня