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

Массивы и как с ними работать

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


Вступление в Клуб: 18.08.2011
СообщениеЧт Ноя 08, 2012 15:30   Массивы и как с ними работать Ответить с цитатой
Полезность: Нет оценки
Создал справочник, один из реквизитов - Массив, массив в свою очередь ссылается на Ссылки, а ссылка на тип: DECL_ON_CRED_REF (Заявки на получение кредита/гарантии).

Добавление, изменение, удаление в этот массив работает как положено, вопросов нет. Но проблема в том, что одна заявка должна принадлежать одному агенту, поэтому нужна проверка на наличии или отсутствии id данной заявки в данном массиве. И, если, хотя бы у одного агента данная заявка лежит в массиве - выдать pragma error.

Не могу понять, как это сделать. Как сделать селект, чтобы он вытащил все id заявок находящиеся у всех агентах в этих массивах.
Натолкните на мысль, плиз.
yaffil
Профи


Вступление в Клуб: 18.08.2011
СообщениеЧт Ноя 08, 2012 16:15    Ответить с цитатой
Полезность: Нет оценки
Код:

select x(
x.[STR_AGENT].[NAME] :C_AGENT
,x.[STR_PRIVL_ZAYA]%id :C_ZAYA_ID
,x.[STR_PRIVL_ZAYA].[DOCUMENT_NUM] :C_ZAYA_NOM
,x.[STR_PRIVL_ZAYA].[DATE_DECL] :C_ZAYA_DATE
,x.[STR_PRIVL_ZAYA].[SUMMA] :C_ZAYA_SUM
) in ::[STR_AGENTS_BANK];


Вот поковырялся, такой селект правильно выдаёт номер, дату, сумму, но id (C_ZAYA_ID) выдаёт не понятное (наверное массива), а как тут получить id заявки?
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеЧт Ноя 08, 2012 16:19    Ответить с цитатой
Полезность: Нет оценки
ФПЭ Информация о гашении облигаций и купонов. Инвесторы
Изменить EDIT#AUTO

begin
-- проверка уникальности
for x in this%collection
where x <> this and
nvl(x.[DOG],0) = nvl(P_DOG,0)
loop
if P_DOG is null then
pragma error('В массиве инвесторов уже есть запись для банка');
else
pragma error('В массиве инвесторов уже есть инвестор с договором №'||P_DOG.[NUM_DOG]);
end if;
end loop;
Volod
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеЧт Ноя 08, 2012 16:22    Ответить с цитатой
Полезность: Нет оценки
Получить ID ссылки можно через ТИП.[].
Select бы посмотреть.
devor
Профи


Вступление в Клуб: 13.02.2012
СообщениеЧт Ноя 08, 2012 16:27   Re: Массивы и как с ними работать Ответить с цитатой
Полезность: Нет оценки
yaffil пишет:

Не могу понять, как это сделать. Как сделать селект, чтобы он вытащил все id заявок находящиеся у всех агентах в этих массивах.
Натолкните на мысль, плиз.


Как-то так примерно. Схемы под рукой нет, так что код написан от руки - может потребовать правки.

ref_my_ut ref [USER_TYPE]; -- элемент коллекции ссылок
count_of_my_ut integer; --счетчик количества вхождений
begin
select pc(count(ut.[])) in ::[PR_CRED] all, (::[USER_TYPE_REF] all : ut) all
where ut%collection = pc.[USER_TYPE]
and ut.[] = ref_my_ut
and pc!=this
and rownum<=1
into count_of_my_ut;

if count_of_my_ut >=1 then
pragma error (' ссылка на '||ref_my_ut.[CODE]||' уже есть в других коллекциях')
end if;

end;
yaffil
Профи


Вступление в Клуб: 18.08.2011
СообщениеЧт Ноя 08, 2012 16:29    Ответить с цитатой
Полезность: Нет оценки
Селект написал выше, мне бы вместо id массива по конструкции x.[STR_PRIVL_ZAYA]%id :C_ZAYA_ID получить id конкретной заявки в массиве, как это делает x.[STR_PRIVL_ZAYA].[DOCUMENT_NUM] :C_ZAYA_NOM.

Номер шагает по всем ссылкам и выдаёт собственно номер заяки. Как мне переделать x.[STR_PRIVL_ZAYA]%id чтобы получить id заявки, а не массива?
Мне он нужен будет в дальнейшем для написания отчётов.
devor
Профи


Вступление в Клуб: 13.02.2012
СообщениеЧт Ноя 08, 2012 16:44    Ответить с цитатой
Полезность: 2
yaffil пишет:
Селект написал выше, мне бы вместо id массива по конструкции x.[STR_PRIVL_ZAYA]%id :C_ZAYA_ID получить id конкретной заявки в массиве, как это делает x.[STR_PRIVL_ZAYA].[DOCUMENT_NUM] :C_ZAYA_NOM.

Номер шагает по всем ссылкам и выдаёт собственно номер заяки. Как мне переделать x.[STR_PRIVL_ZAYA]%id чтобы получить id заявки, а не массива?
Мне он нужен будет в дальнейшем для написания отчётов.


Выкинь свой селект и смотри на мой, там нужно типы поменять на нужные и все.
Либо, приведи все Типы (базовый(владелец массива), массив ссылок, ссылка и структура).

Подозреваю, что STR_PRIVL_ZAYA - это ссылка. Тогда id заявки можно получить вот так STR_PRIVL_ZAYA.[]
yaffil
Профи


Вступление в Клуб: 18.08.2011
СообщениеЧт Ноя 08, 2012 16:53    Ответить с цитатой
Полезность: Нет оценки
devor пишет:

Подозреваю, что STR_PRIVL_ZAYA - это ссылка. Тогда id заявки можно получить вот так STR_PRIVL_ZAYA.[]


Да я описывал выше, STR_PRIVL_ZAYA - это реквизит на массив, массив на ссылку, ссылка на заявку Very Happy

Спасибо огромное вот в такой конструкции выдаёт то что доктор прописал:
Код:

STR_PRIVL_ZAYA.[]%id
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
Страница 1 из 1

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