Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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 написать )) |
|
 |
|