powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / cursor update
7 сообщений из 7, страница 1 из 1
cursor update
    #32165331
Фотография viman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При выполнении функции возникает ошибка 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
cursor update
    #32165345
AI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если функция вызывается из SQL-запроса, то и не должно работать - одно из ограничений функций в SQL - запрет на DML. Если вызывается из процедуры, то зачем писать функцию, тем более, что возвращает одно и то же значение?
...
Рейтинг: 0 / 0
cursor update
    #32165390
Фотография viman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да собственно дело не в функции и не в возвращаемом значении, я же даже тему написал, что трабл с апдейтом курсора. Я переделал и в процедуру, дело не в этом. Просто проапгрейдили сервер с 8.0.5 до 8.1.7, началась такая ерунда.
...
Рейтинг: 0 / 0
cursor update
    #32165421
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На мой вгляд код очень неряшливый. Перепиши без использования курсора.

Код: 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
cursor update
    #32165637
Фотография viman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
За код спасибо, хоть я и сам написал бы, теперь думать меньше. Проблема опять же не в этом. Просто есть тонны рабочего кода где дофига этих курсоров и все переписывать из за обновления сервера как то не очень разумно.
А вообще кто-нибудь знает что такое pragma и как ее использовать? Посоветовали покопать там, я все перепробовал, вообще не компилируется я ней. В добавок гдето видел что pragma указывает компилятору уровень доступа функции, то есть если прагму не прописать вроде как она небезопаная для компилятора считается.
...
Рейтинг: 0 / 0
cursor update
    #32165652
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Советую тебе весь код переписать потихоньку-помаленьку, даже если наёдешь выход из положения в этом виде.

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


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