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

добавить столбец в представление

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
Псевдоним123
Участник - экстремал


Вступление в Клуб: 05.06.2018
СообщениеПн Окт 08, 2018 10:27   добавить столбец в представление Ответить с цитатой
Полезность: Нет оценки
добрый день.
подскажите, есть представление, в которое необходимо добавить еще столбец.
представление создано из реквизитов(в основном в виде ссылок).
поле, которое необходимо добавить есть в ссылках, но мне необходимо из ссылки достать определенное поле.
как это можно сделать?
lexus
Профи


Вступление в Клуб: 28.09.2007
СообщениеПн Окт 08, 2018 10:45    Ответить с цитатой
Полезность: Нет оценки
Если речь о простом представлении...
Слева внизу список ссылочных реквизитов типа. Правой кнопкой на нужном - Добавить ссылку. Потом встаешь на добавленный и справа видишь реквизиты ссылочного типа. Перетаскиваешь нужный наверх в колонки.
Псевдоним123
Участник - экстремал


Вступление в Клуб: 05.06.2018
СообщениеПн Окт 08, 2018 10:47    Ответить с цитатой
Полезность: Нет оценки
это то я знаю, но необходимо выдернуть конкретное поле из ссылки которого нет в реквизитах.
lexus
Профи


Вступление в Клуб: 28.09.2007
СообщениеПн Окт 08, 2018 11:01    Ответить с цитатой
Полезность: Нет оценки
Псевдоним123 пишет:
это то я знаю, но необходимо выдернуть конкретное поле из ссылки которого нет в реквизитах.

Не понимаю эту фразу.
Псевдоним123
Участник - экстремал


Вступление в Клуб: 05.06.2018
СообщениеПн Окт 08, 2018 11:12    Ответить с цитатой
Полезность: Нет оценки
lexus пишет:
Если речь о простом представлении...
Слева внизу список ссылочных реквизитов типа. Правой кнопкой на нужном - Добавить ссылку. Потом встаешь на добавленный и справа видишь реквизиты ссылочного типа. Перетаскиваешь нужный наверх в колонки.


то что написано это я знаю.
вопрос в том, что необходимо выдернуть конкретное поле из ссылочного реквизита, которого после нажатия "Правой кнопкой на нужном - Добавить ссылку" справа нет.
например, в ссылочном реквизите есть поля: "collection_id", "obj_id", а необходимо поле "name"
Матвеев Евгений
Профи


Вступление в Клуб: 31.01.2012
СообщениеПн Окт 08, 2018 11:13    Ответить с цитатой
Полезность: 1
Цитата:
необходимо выдернуть конкретное поле из ссылки которого нет в реквизитах.


Приветствую, как вариант

Простое представление
Написать свою функцию, которая по доступному, для искомого представления полю(значению) будет возвращать из третьих мест то значение, которое нужно(можно сделать в простом представлении, реквизит "Источник данных")

Простое представление
Написать свой select, который по доступному, для искомого представления полю(значению) будет возвращать из третьих мест то значение, которое нужно(можно сделать в простом представлении, реквизит "Источник данных")

Либо сделать своё pl plus представление, и в select заложить любую бизнес логику
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеПн Окт 08, 2018 11:15    Ответить с цитатой
Полезность: 1
тебе нужна обратная ссылка или вставка pl/sql

обратная ссылка - посмотри как в Кредитах (Полный спискок что ли) выводится колонка Обеспечение

По вставке - любая колонка которая выводит "количество объектов" {3} просто посмотри как делается вставка
Псевдоним123
Участник - экстремал


Вступление в Клуб: 05.06.2018
СообщениеВт Окт 09, 2018 13:28    Ответить с цитатой
Полезность: Нет оценки
не подскажете, если простое представление состоит из реквизитов, можно ли как-нибудь добавить запросом еще несколько полей?
Эмиралька
Эксперт


Вступление в Клуб: 09.11.2015
СообщениеВт Окт 09, 2018 14:16    Ответить с цитатой
Полезность: 1
Псевдоним123 пишет:
не подскажете, если простое представление состоит из реквизитов, можно ли как-нибудь добавить запросом еще несколько полей?

Представление представляет собой

а) метаданные. Ну это, положим, не особая проблема, редактировать представление runtime возможность есть.

б) которые кэшируются в АРМ Навигатор. То есть после модификации представления нужно как-то заставить пользователя (а то и всех пользователей) закрыть навигатор. Нерешаемо.

в) данные, предоставляемые представлением должны проверяться на доступ, чтобы не предоставить не тем пользователям не ту информацию.
А вот тут проблема, однако.
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеВт Окт 09, 2018 17:25    Ответить с цитатой
Полезность: Нет оценки
Псевдоним123 пишет:
не подскажете, если простое представление состоит из реквизитов, можно ли как-нибудь добавить запросом еще несколько полей?


обрисуйте задачу.
lexus
Профи


Вступление в Клуб: 28.09.2007
СообщениеВт Окт 09, 2018 21:56    Ответить с цитатой
Полезность: Нет оценки
Псевдоним123 пишет:
не подскажете, если простое представление состоит из реквизитов, можно ли как-нибудь добавить запросом еще несколько полей?

Независимых - да. vtar упоминал это выше. Добавляешь пустую колонку и в ней прописываешь источник pl/sql запросом. И так сколько нужно колонок.
Но, единый запрос, возвращающий несколько полей - так вроде не получится.
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеСр Окт 10, 2018 09:29    Ответить с цитатой
Полезность: 1
lexus пишет:

Но, единый запрос, возвращающий несколько полей - так вроде не получится.


если только склеить в строку и одним полем.
listagg Или wm_concat
Псевдоним123
Участник - экстремал


Вступление в Клуб: 05.06.2018
СообщениеСр Окт 10, 2018 10:15    Ответить с цитатой
Полезность: Нет оценки
решил переписать представление и столкнулся с проблемой, что в последних столбцах не отражаются данные, хотя они есть..

[code]
type main is
SELECT A1_1(

A1_1.[SUMMA_DOG],
A1_2.[DATE_BEGIN],
A1_2.[DATE_ENDING], A1_1.[LIST_PROL],
A1_1.[CLIENT] ,
A1_1.[ACCOUNT] ,
A1_1.[DATE_GIVE],
A1_1.[DATE_ENDING_MAX],
A1_2.[ARRAY_DOG_ACC], ,
A1_1.[FILIAL],
A1_1%CLASS,
A1_2.[ARRAY_SUM_DOG],
A1_1.[DEBTORS],
A1_1.[BANK_SWIFT],
A1_2.[INTERNAL_CODE],
abs(A1_1%ID),
A1_1.[HIGH_LEVEL_CR],
A1_1.[PROPERTIES],

(select p(p.[date_beg]) in ::[PROPERTIES], (::[PROPERTY_GRP] all : g), (::[PROD_PROPERTY] all : d)
where p%COLLECTION=a1_1.[properties]
and p.[GROUP_PROP]=g%id and p.[prop]=d%id
--and g%id = 92187029348
and rownum = 1
and g.[CODE] = 'SVB_RISK_PREMIUM'),

(select g(
TRIM(DECODE(NVL(g.[TYPE_VALUE],' '),' ',d.[NAME],
'NUMBER',TO_CHAR(p.[NUM],'999G999G999G999G990D0099'),
'STRING',p.[STR],
'DATE',TO_CHAR(p.[V_DATE],'dd.mm.yyyy'),
'BOOL',DECODE(p.[BOOL],'1','Да','0','Нет',''),
'REF',Z$RUNTIME_OBJ.GETOBJVALUE(p.[OBJ],g.[TBP]),
'!Ошибка! Тип значения не определён!'))
)
in ::[PROPERTY_GRP], (::[PROPERTIES] all : p), (::[PROD_PROPERTY] all : d)
where p%COLLECTION=a1_1.[properties]
and p.[GROUP_PROP]=g%id and p.[prop]=d%id
--and g%id = 92187029348
and rownum = 1
and g.[CODE] = 'SVB_RISK_PREMIUM'),

(select p(p.[date_beg]) in ::[PROPERTIES], (::[PROPERTY_GRP] all : g), (::[PROD_PROPERTY] all : d)
where p%COLLECTION=a1_1.[properties]
and p.[GROUP_PROP]=g%id and p.[prop]=d%id
--and g%id = 144962844321
and rownum = 1
and g.[CODE] = 'SVB_INNER_RATING'),

(select g(
TRIM(DECODE(NVL(g.[TYPE_VALUE],' '),' ',d.[NAME],
'NUMBER',TO_CHAR(p.[NUM],'999G999G999G999G990D0099'),
'STRING',p.[STR],
'DATE',TO_CHAR(p.[V_DATE],'dd.mm.yyyy'),
'BOOL',DECODE(p.[BOOL],'1','Да','0','Нет',''),
'REF',Z$RUNTIME_OBJ.GETOBJVALUE(p.[OBJ],g.[TBP]),
'!Ошибка! Тип значения не определён!'))
)
in ::[PROPERTY_GRP], (::[PROPERTIES] all : p), (::[PROD_PROPERTY] all : d)
where p%COLLECTION=a1_1.[properties]
and p.[GROUP_PROP]=g%id and p.[prop]=d%id
--and g%id = 144962844321
and rownum = 1
and g.[CODE] = 'SVB_INNER_RATING'),

(select p(p.[date_beg]) in ::[PROPERTIES], (::[PROPERTY_GRP] all : g), (::[PROD_PROPERTY] all : d) collections
where p%COLLECTION=a1_1.[properties]
and p.[GROUP_PROP]=g%id and p.[prop]=d%id
--and g%id = 6799565379
and rownum = 1
and g.[CODE] = 'СВБ_КУРИР_ПОДР'),

(select g(
TRIM(DECODE(NVL(g.[TYPE_VALUE],' '),' ',d.[NAME],
'NUMBER',TO_CHAR(p.[NUM],'999G999G999G999G990D0099'),
'STRING',p.[STR],
'DATE',TO_CHAR(p.[V_DATE],'dd.mm.yyyy'),
'BOOL',DECODE(p.[BOOL],'1','Да','0','Нет',''),
'REF',Z$RUNTIME_OBJ.GETOBJVALUE(p.[OBJ],g.[TBP]),
'!Ошибка! Тип значения не определён!'))
)
in ::[PROPERTY_GRP], (::[PROPERTIES] all : p), (::[PROD_PROPERTY] all : d)
where p%COLLECTION=a1_1.[properties]
and p.[GROUP_PROP]=g%id and p.[prop]=d%id
--and g%id = 6799565379
and rownum = 1
and g.[CODE] = 'СВБ_КУРИР_ПОДР'
--and g.[code] = 'СВБ_КУРИР_ПОДР'
)
)

in ::[PR_CRED] ,
(::[PRODUCT] all : A1_2)
WHERE A1_1%ID = A1_2%ID
[/code]
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеСр Окт 10, 2018 10:20    Ответить с цитатой
Полезность: 1
Код:


in ::[PROPERTY_GRP], (::[PROPERTIES] all : p), (::[PROD_PROPERTY] all : d)
 where p%COLLECTION=a1_1.[properties]




property_GRP всегда имеет collection_id ?

Я всегда беру за правило в джойнах колотить все ALL по всем таблицам

указываю явно в условиях отбор по %collection

Код:


in ::[PROPERTY_GRP], (::[PROPERTIES] all : p), (::[PROD_PROPERTY] all : d)  ALL
 




и тут

in ::[PR_CRED] ,
(::[PRODUCT] all : A1_2)

нету ALL
Псевдоним123
Участник - экстремал


Вступление в Клуб: 05.06.2018
СообщениеСр Окт 10, 2018 11:45    Ответить с цитатой
Полезность: Нет оценки
спасибо всем за советы/подсказки, решил проблему.
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
Страница 1 из 1

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