powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Необъяснимый глюк с возвратом значения пользовательской функции
13 сообщений из 13, страница 1 из 1
Необъяснимый глюк с возвратом значения пользовательской функции
    #39515041
verter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Использую Oracle 11.
Создал обыкновенную пользовательскую функцию, в которой просто селектом получаю одно значение и вывожу его в качестве результата работы функции. Значение типа float.
Всё работало нормально. Но в один прекрасный момент функция почему то стала давать неверный результат. Даёт цифру, но неправильную. Проверяю запрос внутри функции - работает правильно, даёт нужную цифру. Вызываю функцию select MyFunc(p1,p2) from dual - результат неверный. Просто пересоздал функцию ничего не меняя, делаю select MyFunc(p1,p2) from dual - результат правильный. Мистика какая то.
Такое ощущение, что результат функции запомнился где то в кэше и подвис там и когда вызывал функцию, то вместо честного её выполнения результат брался старый из кэша. Как такое вообще может быть?
...
Рейтинг: 0 / 0
Необъяснимый глюк с возвратом значения пользовательской функции
    #39515049
мелафоний
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
verterКак такое вообще может быть?

такого быть не может.

1. функцию
2. пример использования

>>>>>
результат неверный.
результат правильный.
>>>>>
как определил?
...
Рейтинг: 0 / 0
Необъяснимый глюк с возвратом значения пользовательской функции
    #39515086
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мелафонийverterКак такое вообще может быть?

такого быть не может.
http://www.oracle.com/technetwork/issue-archive/2010/10-sep/o57plsql-088600.html
...
Рейтинг: 0 / 0
Необъяснимый глюк с возвратом значения пользовательской функции
    #39515094
verter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мелафоний,

я понимаю, что не может, но как говорили в одном известном фильме: в нашей стране может быть даже то чего быть не может.

функцию я приведу схематично, смысла нет приводить реальную:

create or replace function f_myfunc(p1 in integer, p2 in integer) return float
is
Result float;
begin
select sum(t.cost)
into Result
from tbl1 t
where t.id = p1 and t.id2 = p2;

return(Result);
end;

выполняю:

select f_myfunc(10,20) res from dual

получаю: res = 123.56

выполняю отдельно:

select sum(t.cost) as res
from tbl1 t
where t.id = p1 and t.id2 = p2;

получаю: res = 756.87
...
Рейтинг: 0 / 0
Необъяснимый глюк с возвратом значения пользовательской функции
    #39515104
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
verter,

Тут парень похожую ситуацию рассказывал, может поможет
http://www.sql.ru/forum/1269960/raznye-rezultaty-po-odnomu-zaprosu
...
Рейтинг: 0 / 0
Необъяснимый глюк с возвратом значения пользовательской функции
    #39515115
verter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous http://www.oracle.com/technetwork/issue-archive/2010/10-sep/o57plsql-088600.html

да, но я не вставлял в тело своей функции директиву RESULT_CACHE RELIES_ON
Она что в Oracle 11 по-умолчанию включена?
...
Рейтинг: 0 / 0
Необъяснимый глюк с возвратом значения пользовательской функции
    #39515129
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
verter,

Параметр result_cache_mode стоит auto?
...
Рейтинг: 0 / 0
Необъяснимый глюк с возвратом значения пользовательской функции
    #39515149
verter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderverter,

Параметр result_cache_mode стоит auto?

Нет, стоит MANUAL
...
Рейтинг: 0 / 0
Необъяснимый глюк с возвратом значения пользовательской функции
    #39515153
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
verter,

Тогда, скорее всего, ошибка в вашем коде. Нужен полный текст функции
...
Рейтинг: 0 / 0
Необъяснимый глюк с возвратом значения пользовательской функции
    #39515154
verter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из следующего:
...
Рейтинг: 0 / 0
Необъяснимый глюк с возвратом значения пользовательской функции
    #39515158
verter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из следующего:

In addition, by specifying RELIES_ON (employees), we inform Oracle Database that if any session commits changes to that table, any data in the result cache drawn from the table must be invalidated. The next call to the one_employee function would then have to execute the query and retrieve the data fresh from the table.

следует, что если я в функции включу RESULT_CACHE RELIES_ON, то всё должно быть хорошо, т.к. оракл после этого сам будет следить за кэшем. Правильно я понял?
...
Рейтинг: 0 / 0
Необъяснимый глюк с возвратом значения пользовательской функции
    #39515186
verter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проблема решается если внутри функции в селекте прописать директиву оптимизатору:

SELECT /*+ result_cache */ ...
INTO n
FROM TABLE1;

В этом случае система автоматически будет отслеживать возможные изменения таблиц в запросе и перезагружать кэш.

И я ничего не путаю - в запросе не было никакой ошибки и параметр стоял в состоянии "ручной". Это какой то глюк оракла.
...
Рейтинг: 0 / 0
Необъяснимый глюк с возвратом значения пользовательской функции
    #39515188
verter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Необъяснимый глюк с возвратом значения пользовательской функции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]