Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / cursor update / 7 сообщений из 7, страница 1 из 1
21.05.2003, 16:25
    #32165331
viman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursor update
При выполнении функции возникает ошибка ORA-14551

function add_maket_data(Vstanc_id varchar2, Vdate varchar2, VVyr number, VOtpE number, VOtpT number) return number is
ID number;
CURSOR CUR
IS Select * from stancii_data where stanc_id=decode(Vstanc_id,311511,1,311510,2)
and date_ST=to_date(VDate,'DD.MM.YYYY')
FOR UPDATE OF SUTKI,otp_e,otp_t,maket_fl;
Rec CUR%ROWTYPE;
ret number;

BEGIN
ret:=0;
if Vstanc_id='311511' then
ID:=1;
elsif Vstanc_id='311510' then
ID:=2;
end if;

OPEN CUR;
FETCH CUR INTO REC;
IF CUR%FOUND then
if Rec.maket_FL=0 then
update stancii_data set SUTKI=Vvyr, OTP_E=VOtpE, OTP_T=VOtpT, Maket_FL=1 where current of CUR; \\\ Здесь не работает
ret:=1;
end if;
else
insert into stancii_data (stanc_id, date_st, SUTKI, OTP_E, OTP_T, Maket_FL) values (id, to_date(VDate,'DD/MM/YYYY'), Vvyr, VOtpE, VOtpT,1);
ret:=1;
end if;
CLOSE CUR;
return ret;
commit;

end add_maket_data;

Проблема в том не получается апдейтить курсор, хотя просто апдейты и инсерты работают. Где может быть собака зарыта? Пробовал добавить
PRAGMA RESTRICT_REFERENCES (DEFAULT, WNDS, WNPS);
вообще не компилируется.
...
Рейтинг: 0 / 0
21.05.2003, 16:36
    #32165345
AI
AI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursor update
Если функция вызывается из SQL-запроса, то и не должно работать - одно из ограничений функций в SQL - запрет на DML. Если вызывается из процедуры, то зачем писать функцию, тем более, что возвращает одно и то же значение?
...
Рейтинг: 0 / 0
21.05.2003, 17:03
    #32165390
viman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursor update
Да собственно дело не в функции и не в возвращаемом значении, я же даже тему написал, что трабл с апдейтом курсора. Я переделал и в процедуру, дело не в этом. Просто проапгрейдили сервер с 8.0.5 до 8.1.7, началась такая ерунда.
...
Рейтинг: 0 / 0
21.05.2003, 17:33
    #32165421
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursor update
На мой вгляд код очень неряшливый. Перепиши без использования курсора.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
begin
......
update 
  stancii_data set (SUTKI,OTP_E,OTP_T,VOtpT, Maket_FL) = 
         Select 
            * 
           from 
            stancii_data 
           where 
            stanc_id=decode(Vstanc_id, 311511 , 1 , 311510 , 2 ) and 
            date_ST=to_date(VDate,'DD.MM.YYYY') ;

  if sql%rowcount =  0  then
     insert into stancii_data (stanc_id, date_st, SUTKI, OTP_E, OTP_T, Maket_FL)      
       values (id, to_date(VDate,'DD/MM/YYYY'), Vvyr, VOtpE, VOtpT, 1 ); 
 end if;
end;

end;


Тонкости сам отточишь.
...
Рейтинг: 0 / 0
22.05.2003, 08:02
    #32165637
viman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursor update
За код спасибо, хоть я и сам написал бы, теперь думать меньше. Проблема опять же не в этом. Просто есть тонны рабочего кода где дофига этих курсоров и все переписывать из за обновления сервера как то не очень разумно.
А вообще кто-нибудь знает что такое pragma и как ее использовать? Посоветовали покопать там, я все перепробовал, вообще не компилируется я ней. В добавок гдето видел что pragma указывает компилятору уровень доступа функции, то есть если прагму не прописать вроде как она небезопаная для компилятора считается.
...
Рейтинг: 0 / 0
22.05.2003, 08:40
    #32165652
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursor update
Советую тебе весь код переписать потихоньку-помаленьку, даже если наёдешь выход из положения в этом виде.

Кстати, а автономные транзакции ты не используешь?
...
Рейтинг: 0 / 0
22.05.2003, 08:51
    #32165656
viman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursor update
Собственно код изменил за 2 минуты, курсор оставил для выборки и переделал в процедуру. Вообще код чужой, нормализация у базы хромает, а переписывать все ... по мере обнаружения багов.
Автономные транзакции нет, не пользовался. У меня вообще еще опыта с Oracle маловато. Да этого с IB работал, вот 3 месяца как на Oracle перешел.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / cursor update / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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