ORA-06571 при вызове простой функции

boff
Дата: 21.02.2007 14:01:42
Здравствуйте, уважаемые!

Почему Oracle при вызове из запроса простенькой функции вида:

  function fn1(
    p1   VarChar2
    )
    Return Date is Result Date;
  Begin

     Select MAX(Day) into Result from T1
        where field1= p1;

    Return(Result);
  End fn1;

ругается на меня грязными словами "ORA-06571: function FN1 does not guarantee not to update database".

Почему? Как это обойти?

Заранее благодарю за помощь.
tru55
Дата: 21.02.2007 14:04:20
1. версия Oracle?
2. как вызываешь, небось из SQL? :)
boff
Дата: 21.02.2007 14:12:12
Oracle 7.3.4

Вызываю запросом вида:
Select t.*, fn1('значение') from t2 t
boff
Дата: 21.02.2007 14:13:38
Причем, есть множество функций (в том числе и написанных мной), которые прекрасно работают при вызове из запроса, а эта не хочет. Ничего не понимаю...
alex-ls
Дата: 21.02.2007 14:14:01
boff
Oracle 7.3.4

Вызываю запросом вида:
Select t.*, fn1('значение') from t2 t

да уж знакомоство с Oracle Вы начали своебразно!
1. Откуда такое старье откопали
2. Такие функции писать незачем...
boff
Дата: 21.02.2007 14:17:59
1. На этой версии работает некоторое коммерческое ПО, для которого я пишу небольшие программки и отчеты - выбирать не приходится :(
2. Естессно, я несколько упростил код функции, передав ее основной смысл.

З.Ы. Может дело в том, что эта функция находится в пакете да еще и в другой схеме?
mcureenab
Дата: 21.02.2007 14:20:41
boff
З.Ы. Может дело в том, что эта функция находится в пакете да еще и в другой схеме?


Естественно!

Меру надо знать в упрощении, чтобы с водой ребёночка не выплеснуть.
boff
Дата: 21.02.2007 14:25:06
mcureenab, так дело в пакете или в схеме?
Elic
Дата: 21.02.2007 14:27:11
mcureenab
boff
З.Ы. Может дело в том, что эта функция находится в пакете да еще и в другой схеме?
Естественно!
Бред!

mcureenab
Меру надо знать в упрощении, чтобы с водой ребёночка не выплеснуть.
А вот это - да. Однозначно ошибка в 17-ой строке.
boff
Дата: 21.02.2007 14:36:30
Вынес из пакета - заработало. Но это неудобно - на каждую новую функцию давать гранты.. Нельзя ли это как-нибудь обойти?