CftClub.ru
Клуб специалистов ЦФТ-Банк

Массив в представлении

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Уроки ЦФТ-Банк для начинающих
Предыдущая тема :: Следующая тема  
Автор Сообщение
Dizzy072
Участник


Вступление в Клуб: 06.03.2017
СообщениеПн Апр 10, 2017 14:36   Массив в представлении Ответить с цитатой
Полезность: Нет оценки
День добрый. Прошу вашей помощи уважаемые форумчане. Ситуация такая - имеется некий массив, который содержит в себе данный. Необходимо эти поля из массива вынести отдельно в представление. Кажется этот момент должен быть выполнен через функцию, но хотелось бы усылать Ваше мнение.
Матвеев Евгений
Профи


Вступление в Клуб: 31.01.2012
СообщениеПн Апр 10, 2017 18:32    Ответить с цитатой
Полезность: Нет оценки
Наверх, как вариант, можно вот так поднимать...


1. Пишешь в библиотеке обработчик:

(Это совсем из простых... выводим или символы {...} когда пусто или единичное значение или символы множества {***}, когда значений 2 и более)

Код:

function get_res_chck(cur_inst ref [FM_RESULT_CHECK]) return varchar2(1000) is
   rez varchar2(1000);
begin

   begin
      
      select x(x.[KD_CRIT].[NAME])
      in cur_inst.[REMARK_ARR] all
      into rez;
   
   exception
      when NO_DATA_FOUND then rez := '{...}';
      when TOO_MANY_ROWS then rez := '{***}';
   end;

   return rez;
end;


(или чуть чуть по другому ... либо пусто {...}, либо накапливаем текст и выводим общей строкой, вместо {***}, для 1ого или более вхождений)

Код:

function get_res_chck(cur_inst ref [FM_RESULT_CHECK]) return varchar2(1000) is
   rez varchar2(1000) := '';
begin
   
   for x in cur_inst.[REMARK_ARR] all loop
       rez := rez||x.[KD_CRIT].[NAME]||';';
   end loop;
   
   if length(rez) = 0 then
      rez := '{...}';   
   end if;
   
   return rez;
end;


2. Создаешь расширение (если не дистрибутив... пункт можно пропустить)

3. Добавляешь поле в закладке "Колонки представления"

Alkov
Профи


Вступление в Клуб: 23.09.2010
СообщениеСр Апр 12, 2017 05:58    Ответить с цитатой
Полезность: Нет оценки
можно через SQL функции преобразование столбца в строку,
см. sql.ru
Эмиралька
Эксперт


Вступление в Клуб: 09.11.2015
СообщениеСр Апр 12, 2017 13:01    Ответить с цитатой
Полезность: Нет оценки
Alkov пишет:
можно через SQL функции преобразование столбца в строку,
см. sql.ru

pivot/unpivot ?
Матвеев Евгений
Профи


Вступление в Клуб: 31.01.2012
СообщениеСр Апр 12, 2017 13:03    Ответить с цитатой
Полезность: Нет оценки
Эмиралька пишет:
Alkov пишет:
можно через SQL функции преобразование столбца в строку,
см. sql.ru

pivot/unpivot ?


Коллеги, может и пример какой под рукой есть?
Alkov
Профи


Вступление в Клуб: 23.09.2010
СообщениеЧт Апр 13, 2017 10:51    Ответить с цитатой
Полезность: Нет оценки
ну например для вывода нескольких свойств по договору
пишем в столбец:
[code]
(select listagg(C_STR_VALUE, ', ') within group (order by C_STR_VALUE) from z#property where collection_id = A1_1.C_PRORERTY_ARR
and c_date_begin <= A2_1.C_OP_DATE
and (nvl(c_date_end, A2_1.C_OP_DATE) >= A2_1.C_OP_DATE)
and c_property_type = /*PL+*/::[PROPERTY_TYPE]([code]='MY_PROP')/*PL-*/)
[/code]
Матвеев Евгений
Профи


Вступление в Клуб: 31.01.2012
СообщениеЧт Апр 13, 2017 12:41    Ответить с цитатой
Полезность: Нет оценки
Alkov пишет:
ну например для вывода нескольких свойств по договору
пишем в столбец:

(select listagg(C_STR_VALUE, ', ') within group (order by C_STR_VALUE) from z#property where collection_id = A1_1.C_PRORERTY_ARR
and c_date_begin <= A2_1.C_OP_DATE
and (nvl(c_date_end, A2_1.C_OP_DATE) >= A2_1.C_OP_DATE)
and c_property_type = /*PL+*/::[PROPERTY_TYPE]([code]='MY_PROP')/*PL-*/)


Вероятно, более производительный вариант, но функционал ограничен синтаксисом sql, какие то сложные расчеты и вывод легче первым вариантом
kai
Профи


Вступление в Клуб: 16.08.2012
СообщениеЧт Май 25, 2017 07:54    Ответить с цитатой
Полезность: 1
Матвеев Евгений пишет:
Alkov пишет:
ну например для вывода нескольких свойств по договору
пишем в столбец:

(select listagg(C_STR_VALUE, ', ') within group (order by C_STR_VALUE) from z#property where collection_id = A1_1.C_PRORERTY_ARR
and c_date_begin <= A2_1.C_OP_DATE
and (nvl(c_date_end, A2_1.C_OP_DATE) >= A2_1.C_OP_DATE)
and c_property_type = /*PL+*/::[PROPERTY_TYPE]([code]='MY_PROP')/*PL-*/)


Вероятно, более производительный вариант, но функционал ограничен синтаксисом sql, какие то сложные расчеты и вывод легче первым вариантом


LISTAGG можно использовать в PL+ через псевдофункцию ANALYTIC. Поищите "LISTAGG" в представлениях и найдёте примеры.
Аленушка
Участник со стажем


Вступление в Клуб: 13.05.2015
СообщениеВт Май 30, 2017 14:27    Ответить с цитатой
Полезность: Нет оценки
только хотела про listag написать ))
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Уроки ЦФТ-Банк для начинающих Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru