|
|
|
cursor update
|
|||
|---|---|---|---|
|
#18+
При выполнении функции возникает ошибка 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); вообще не компилируется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2003, 16:25 |
|
||
|
cursor update
|
|||
|---|---|---|---|
|
#18+
Если функция вызывается из SQL-запроса, то и не должно работать - одно из ограничений функций в SQL - запрет на DML. Если вызывается из процедуры, то зачем писать функцию, тем более, что возвращает одно и то же значение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2003, 16:36 |
|
||
|
cursor update
|
|||
|---|---|---|---|
|
#18+
Да собственно дело не в функции и не в возвращаемом значении, я же даже тему написал, что трабл с апдейтом курсора. Я переделал и в процедуру, дело не в этом. Просто проапгрейдили сервер с 8.0.5 до 8.1.7, началась такая ерунда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2003, 17:03 |
|
||
|
cursor update
|
|||
|---|---|---|---|
|
#18+
На мой вгляд код очень неряшливый. Перепиши без использования курсора. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2003, 17:33 |
|
||
|
cursor update
|
|||
|---|---|---|---|
|
#18+
За код спасибо, хоть я и сам написал бы, теперь думать меньше. Проблема опять же не в этом. Просто есть тонны рабочего кода где дофига этих курсоров и все переписывать из за обновления сервера как то не очень разумно. А вообще кто-нибудь знает что такое pragma и как ее использовать? Посоветовали покопать там, я все перепробовал, вообще не компилируется я ней. В добавок гдето видел что pragma указывает компилятору уровень доступа функции, то есть если прагму не прописать вроде как она небезопаная для компилятора считается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2003, 08:02 |
|
||
|
cursor update
|
|||
|---|---|---|---|
|
#18+
Советую тебе весь код переписать потихоньку-помаленьку, даже если наёдешь выход из положения в этом виде. Кстати, а автономные транзакции ты не используешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2003, 08:40 |
|
||
|
cursor update
|
|||
|---|---|---|---|
|
#18+
Собственно код изменил за 2 минуты, курсор оставил для выборки и переделал в процедуру. Вообще код чужой, нормализация у базы хромает, а переписывать все ... по мере обнаружения багов. Автономные транзакции нет, не пользовался. У меня вообще еще опыта с Oracle маловато. Да этого с IB работал, вот 3 месяца как на Oracle перешел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2003, 08:51 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=32165390&tid=1990422]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
160ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 477ms |

| 0 / 0 |
