|
|
|
курсорная переменная - ошибка "fetch out of sequence"
|
|||
|---|---|---|---|
|
#18+
Столкнулся с проблемой и не могу понять в чем дело. Есть у меня пакадж: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. и есть функция: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Вся проблема в том, что при вызове этой функции из клиентской программы выскакивает ошибка ora-01002:fetch out of sequence. В чем тут может быть дело? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 10:13 |
|
||
|
курсорная переменная - ошибка "fetch out of sequence"
|
|||
|---|---|---|---|
|
#18+
Хм, ты открыл курсор, пробежался по ему до конца, а потом возвращаешь клиенту. В оракле курсоры однонаправленные, т.е. после такого тебе следует заново его открыть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 10:36 |
|
||
|
курсорная переменная - ошибка "fetch out of sequence"
|
|||
|---|---|---|---|
|
#18+
как же так? я добрался до конца курсора, хорошо, но курсор-то еще открыт! если я теперь его опять открывать буду, это же криво, нельзя ли теперь вернутся к началу курсора? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 10:56 |
|
||
|
курсорная переменная - ошибка "fetch out of sequence"
|
|||
|---|---|---|---|
|
#18+
ах да, однонаправленные говоришь.. блин, как неудобно!!! эх, Оракл, блин :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 11:05 |
|
||
|
курсорная переменная - ошибка "fetch out of sequence"
|
|||
|---|---|---|---|
|
#18+
"но курсор-то еще открыт! " Курсор это такая-же переменная памяти, как и все остальные. Все переменные обьявленные в обычных прцедурах и функциях - локальны - это означает, когда функция или процедура заверщается - высвобождаются все локальные переменные. В данном сдучае переменная cur_get GL.TCursor обьявлена внутри функции - она не может существовать вне функции. Если ты хочешь обращаться к курсору, обьяви его в пакете(модуле). Потомучто переменные пакета являются глобальными и будут высвобождены только после завершения сессии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 11:05 |
|
||
|
курсорная переменная - ошибка "fetch out of sequence"
|
|||
|---|---|---|---|
|
#18+
не получается обявить глобально в модуле переменную типа ref cursor... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 11:21 |
|
||
|
курсорная переменная - ошибка "fetch out of sequence"
|
|||
|---|---|---|---|
|
#18+
Ты обьяви просто курсор ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 11:24 |
|
||
|
курсорная переменная - ошибка "fetch out of sequence"
|
|||
|---|---|---|---|
|
#18+
Если уж очень хочется извернуться - выложи данные запроса в объектную таблицу, пробегись по ней, сделай все, что надо, а потом открой курсор как запрос из нее. Если нет - помни о том, что курсоры в Оракле работают в одну сторону. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 11:24 |
|
||
|
курсорная переменная - ошибка "fetch out of sequence"
|
|||
|---|---|---|---|
|
#18+
так тип ref cursor уже объявлен, в модуле GL, а где я буду использовать этот тип в теле этого же модуля или где-то еще, не все ли равно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 11:26 |
|
||
|
курсорная переменная - ошибка "fetch out of sequence"
|
|||
|---|---|---|---|
|
#18+
Вот выдержка из книги При этом открытие и закрытие курсора должно выполняться в приложении очень аккуратно для возможности его повторного использования в закрытых SQL областях. Как же тогда можно использовать курсор повторно если он однонаправленный? Или здесь по аналогии с soft parse - если курсор уже открыт то его повторное открытие делается быстро типа soft open? А если отпарсенный SQL инвалидируется, инвалидируется ли ассоциированный с ним курсор? или потом при обращении к нему, SQL просто парсится заново? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 11:26 |
|
||
|
курсорная переменная - ошибка "fetch out of sequence"
|
|||
|---|---|---|---|
|
#18+
Может быть имеется в виду следующее: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 11:38 |
|
||
|
курсорная переменная - ошибка "fetch out of sequence"
|
|||
|---|---|---|---|
|
#18+
так при этом дважды будет выполняться запрос! а иначе нельзя? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 11:48 |
|
||
|
курсорная переменная - ошибка "fetch out of sequence"
|
|||
|---|---|---|---|
|
#18+
Будет. Про "иначе" я уже говорил - заполни объектную таблицу и бегай по ней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 11:52 |
|
||
|
курсорная переменная - ошибка "fetch out of sequence"
|
|||
|---|---|---|---|
|
#18+
пардон, я с объектными таблицами не работал. В чем тут будет собственно разница по сравнению с обычной реляционной таблицей, все равно же она будет "реальной"(?), а мне нужно, что бы все это дело было в оперативке и только на момент выполнения функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 11:59 |
|
||
|
курсорная переменная - ошибка "fetch out of sequence"
|
|||
|---|---|---|---|
|
#18+
Не будет она "реальной". Будет только объявление типа. Начиная с Oracle 8i: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. Я не предполагал, что еще раз разрожусь на подобные примеры:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 12:09 |
|
||
|
курсорная переменная - ошибка "fetch out of sequence"
|
|||
|---|---|---|---|
|
#18+
Если нельзя сделать нечто reset(cr); fetch cr into v; тогда хочется согласиться с guilty это же криво . Ведь поставить курсор на начало вроде бы проще чем открыть его заново. Конечно есть подозрение что такая ситуация с однонаправленностью имеет место из-за поддержки консистентности. Открыли курсор - есть гарантия что пробежав по нему мы получим консистентные данные на момент открытия. Насколько я знаю и в обычных запросах тоже курсоры используются только неявно. Если бы курсор можно было использовать повторно сколь угодно долго, была бы большая нагрузка на роллбэк для поддержки read consistency и высокая вероятность snapshot too old. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 12:12 |
|
||
|
курсорная переменная - ошибка "fetch out of sequence"
|
|||
|---|---|---|---|
|
#18+
2 Denis Popov - хм, вот это уже наверно больше подходит, спасибо! А насчет Я не предполагал, что еще раз разрожусь на подобные примеры:) , хорошо что разродился ;) , думаю, что нашлись еще люди, которым небезынтересно было это увидеть. 2 Violina - насчет snapshot too old - резонная причина, как мне кажется, но такая забота создателей Оракл о консистентности, превращается в головную боль разработчиков на нем ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 12:53 |
|
||
|
курсорная переменная - ошибка "fetch out of sequence"
|
|||
|---|---|---|---|
|
#18+
вообще говоря, как оказалось, я рано радовался :( пример, который привел Denis Popov рабочий, но не особо красивый, но как оказалось "причесать" его нельзя!!! под "причесыванием" я имею ввиду объявление табличной переменной: Код: plaintext и работать с ней, однако, такой номер не проходит, выдается ошибка компиляции при использовании ее в Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. впрочем не проходит и создание типа объектной таблицы: Код: plaintext как оказалось, такое объявление недопустимо! вобщем, как в басне: "а воз и ныне там..." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 15:34 |
|
||
|
курсорная переменная - ошибка "fetch out of sequence"
|
|||
|---|---|---|---|
|
#18+
>>cast(multiset(select * from scott.emp) as tbl_emp) вот к этому >>create or replace type t_emp as object Для таблица оф %ROWTYPE кастить не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 15:40 |
|
||
|
курсорная переменная - ошибка "fetch out of sequence"
|
|||
|---|---|---|---|
|
#18+
Да, еще, если будеш делать не select ... from dual, используй bulk collect ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 15:43 |
|
||
|
курсорная переменная - ошибка "fetch out of sequence"
|
|||
|---|---|---|---|
|
#18+
А вообще: PL/SQL User's Guide and Reference, 4. Collections and Records ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 15:46 |
|
||
|
курсорная переменная - ошибка "fetch out of sequence"
|
|||
|---|---|---|---|
|
#18+
а как насчет http:// для PL/SQL User's Guide and Reference, 4. Collections and Records? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 15:50 |
|
||
|
курсорная переменная - ошибка "fetch out of sequence"
|
|||
|---|---|---|---|
|
#18+
Дело в том, что ты привел PL/SQL таблицу е не объектную ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 15:53 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=32156004&tid=1990663]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
187ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 262ms |
| total: | 530ms |

| 0 / 0 |
