| 
 
  
	| Инициализация массива структур 
 
 |  
	
		| Предыдущая тема :: Следующая тема |  
		| Автор | Сообщение |  
		| sbk755 Участник
 
 
 Вступление в Клуб: 27.04.2013
 
 | 
			
				|  Ср Ноя 20, 2013 16:44   Инициализация массива структур |   |  
				| Полезность: Нет оценки 
 |  
				| Уважаемые форумчане, есть необходимость, чтобы операция  (тип "простая") возвращала массив значений определенной структуры.
 Однако. как я понимаю, чтобы операция могла возвратить тип "массив структур" необходимо создать новую сущность с типом "массив" в администраторе словаря данных.
 Инициализирую переменную "массив структур" через "insert" в данную переменную, но это физическая вставка данных в таблицу, а возможно ли инициализация не через "insert", а каким-либо другим способом чтобы значения были сохранены в виде массива значений, но без вставки в таблицу?
 Документация говорит, о том что к переменной с типом "массив структур" применим "%init", но как то у меня не получилось его использовать для инициализации переменной такого типа.
 |  |  
		|  |  
		| Random Эксперт
 
 
 Вступление в Клуб: 27.06.2011
 
 | 
			
				|  Чт Ноя 21, 2013 06:05   Re: Инициализация массива структур |   |  
				| Полезность: Нет оценки 
 |  
				|  	  | sbk755 пишет: |  	  | Уважаемые форумчане, есть необходимость, чтобы операция  (тип "простая") возвращала массив значений определенной структуры.
 Однако. как я понимаю, чтобы операция могла возвратить тип "массив структур" необходимо создать новую сущность с типом "массив" в администраторе словаря данных.
 Инициализирую переменную "массив структур" через "insert" в данную переменную, но это физическая вставка данных в таблицу, а возможно ли инициализация не через "insert", а каким-либо другим способом чтобы значения были сохранены в виде массива значений, но без вставки в таблицу?
 Документация говорит, о том что к переменной с типом "массив структур" применим "%init", но как то у меня не получилось его использовать для инициализации переменной такого типа.
 | 
 
 Почему бы не описать требуемую функцию в операции с типом "Библиотека"?
 |  |  
		|  |  
		| vtar Эксперт
 
 
 Вступление в Клуб: 20.03.2009
 
 | 
			
				|  Чт Ноя 21, 2013 09:37    |   |  
				| Полезность: Нет оценки 
 |  
				|  	  | Код: |  	  | procedure copy_plan (   source   [PLAN_OP], receiver   [PLAN_OP]) is
 plan   [PLAN_OPER];
 begin
 if source%size(0) = 0 then return; end if;
 if receiver%size(0) > 0 then receiver%delete;
 end if;
 for x in source loop
 plan := x;
 -- тут инициализация
 plan%init(true, true);
 -- тут вставка в БД
 receiver%insert(plan);
 end loop;
 end;
 
 | 
 |  |  
		|  |  
		| sbk755 Участник
 
 
 Вступление в Клуб: 27.04.2013
 
 | 
			
				|  Пт Ноя 22, 2013 05:06    |   |  
				| Полезность: Нет оценки 
 |  
				| Спасибо всем откликнувшимся. Попробую уточнить свой вопрос (по структурам в приведенном примере кода).
 Предположим что структура [PLAN_OPER] создана таким образом, что не может иметь экземпляров. На базе ее создан тип "массив" [PLAN_OPER_RE_ARR] и объявлен как возращаемый тип операции.
 
 declare
 plan_oper_ 	[PLAN_OPER];
 plan_oper_ar_ 	[PLAN_OPER_RE_ARR];
 begin
 ....
 --блок инициализации "plan_oper_" необходимыми значениями
 ....
 --помещение накопленной "plan_oper_" в "plan_oper_ar_"
 insert plan_oper_ into plan_oper_ar_;
 end;
 
 Как я понимаю иного способа помещения значений типа "запись" (plan_oper_) в тип "массив" (plan_oper_ar_) не существует кроме как непосредственной вставки записи в таблицу z#plan_oper?
 То есть я не могу из операции вернуть массив значений в виде действительно массива хранящего необходимые значения на уровне переменных пакета БД, а не данных таблицы?
 |  |  
		|  |  
		| Random Эксперт
 
 
 Вступление в Клуб: 27.06.2011
 
 | 
			
				|  Пт Ноя 22, 2013 09:09    |   |  
				| Полезность: Нет оценки 
 |  
				|  	  | sbk755 пишет: |  	  | Спасибо всем откликнувшимся. Попробую уточнить свой вопрос (по структурам в приведенном примере кода).
 Предположим что структура [PLAN_OPER] создана таким образом, что не может иметь экземпляров. На базе ее создан тип "массив" [PLAN_OPER_RE_ARR] и объявлен как возращаемый тип операции.
 
 declare
 plan_oper_ 	[PLAN_OPER];
 plan_oper_ar_ 	[PLAN_OPER_RE_ARR];
 begin
 ....
 --блок инициализации "plan_oper_" необходимыми значениями
 ....
 --помещение накопленной "plan_oper_" в "plan_oper_ar_"
 insert plan_oper_ into plan_oper_ar_;
 end;
 
 Как я понимаю иного способа помещения значений типа "запись" (plan_oper_) в тип "массив" (plan_oper_ar_) не существует кроме как непосредственной вставки записи в таблицу z#plan_oper?
 То есть я не могу из операции вернуть массив значений в виде действительно массива хранящего необходимые значения на уровне переменных пакета БД, а не данных таблицы?
 | 
 
 Наверное, нужно не просто массив сделать, а вложенный массив?
 Тогда будет объявлен тип Oracle соответствующего типа, а с ним уже можно работать как с nested-varray.
 
 А в целом не понимаю, почему не объявить type ttt is table of [PLAN_OPER]%rowtype index by и работать с этим массивом в процедурах и функциях библиотек, зачем именно операция, возвращающая данный тип?
 |  |  
		|  |  
		| vtar Эксперт
 
 
 Вступление в Клуб: 20.03.2009
 
 |  |  
		|  |  
		| sbk755 Участник
 
 
 Вступление в Клуб: 27.04.2013
 
 | 
			
				|  Пт Ноя 22, 2013 12:06    |   |  
				| Полезность: Нет оценки 
 |  
				| Я понимаю, что можно объявить пользовательский тип в библиотеке и сделать реализацию через переменную данного типа. Но ведь объявленный пользовательский тип не сделаешь возращаемым типом операции. Просто использование некой переменной в библиотеке делает не очевидным без анализа кода, то что действительно возращает операция.
 А так достаточно было бы посмотреть на описание операции - есть возращаемый тип, значит его и ловим на выходе.
 |  |  
		|  |  
		|  |  
  
	| 
 
 | Вы не можете начинать темы Вы не можете отвечать на сообщения
 Вы не можете редактировать свои сообщения
 Вы не можете удалять свои сообщения
 Вы не можете голосовать в опросах
 
 |  |