Обработка курсора

Alexei S
Дата: 01.03.2007 15:57:53
Господа, помогите пожалуйста, в Oracle я новичек, так что просьба сильно не ругаться, если что не так написал. Вопрос в том, что каким образом можно в цикле обработать курсор таким образом, чтобы каждая строка была помещена в соотв. запись и была после этого доступна во внешнем блоке? Конечно, было бы лучше, чтобы все строки попали в одну запись (или какой-то другой тип коллекции), но насколько я понял из чтения книжки Фейерштайна, коллекции могут быть исключительно одномерными. Заранее спасибо.
tru55
Дата: 01.03.2007 16:01:17
1. но насколько я понял из чтения книжки Фейерштайна, коллекции могут быть исключительно одномерными
Неправильно понял
2. доступна во внешнем блоке
что понимается под "внешним блоком"
3. читай лучше :)
Alexei S
Дата: 01.03.2007 16:05:38
1.Ещё коллекции могут быть вложенными, но это не то, что требуется для решения задачи.
2.
BEGIN
|
FOR ... |
LOOP | внутренний блок внешний блок
END LOOP; |
END; |
dmidek
Дата: 01.03.2007 16:07:14
Читайте в сторону BULK COLLECT INTO.
Хотя конечно, "внешний блок" - это что то загадочное :-)
tru55
Дата: 01.03.2007 16:09:20
1. коллекция (таблица), в том числе, может состоять из RECORD, вот тебе и двумерность
2. если переменная определена во внешнем блоке, она будет доступна в нем и во всех внутренних
(вложенных)
Alexei S
Дата: 01.03.2007 16:24:46
Спасибо, то есть насколько я понял, необходимо создать коллекцию (скажем, VARRAY), состоящей из записей%ROWTYPE в кол-ве, равном кол-ву строк в курсоре. Не могли бы вы подсказать, какой инструкцией можно загрузить каждую строчку курсора в определенную запись?
Полночный
Дата: 01.03.2007 16:35:24
Alexei S
Спасибо, то есть насколько я понял, необходимо создать коллекцию (скажем, VARRAY), состоящей из записей%ROWTYPE в кол-ве, равном кол-ву строк в курсоре. Не могли бы вы подсказать, какой инструкцией можно загрузить каждую строчку курсора в определенную запись?

Так же, как и в любом другом языке. Оператором присваивания.
v_Array (v_Some_Index) := Cursor_Rec;
tru55
Дата: 01.03.2007 16:38:45
Alexei S
Спасибо, то есть насколько я понял, необходимо создать коллекцию (скажем, VARRAY), состоящей из записей%ROWTYPE в кол-ве, равном кол-ву строк в курсоре. Не могли бы вы подсказать, какой инструкцией можно загрузить каждую строчку курсора в определенную запись?


Лучше использовать index-by table. В ней не нужно ни указывать макс. кол. строк, ни выполнять Extent
Alexei S
Дата: 01.03.2007 16:52:57
Ok, то есть подытожив, необходимо создать новый тип (запись) на основе %ROWTYPE исходной таблицы, а затем определить коллекцию AS вложенная таблица с типом созданной записи (может, немного путаюсь в определениях, умная книжка осталась дома и подсмотреть сейчас не могу). Большое спасибо.
tru55
Дата: 01.03.2007 17:06:54
Более того, %ROWTYPE может ссылаться не только на таблицу, но и на курсор (что часто удобно, поскольку в курсоре м.б. несколько таблиц)