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

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


Вступление в Клуб: 18.05.2011
СообщениеСр Май 18, 2011 14:27   вопрос по работе с массивами Ответить с цитатой
Полезность: Нет оценки
Здравствуйте.

Есть номер фин. счета (AC_FIN).
у AC_FIN есть реквизит Выписка по счету.
Это ссылка на массив Выписка по счету.
В массиве хранятся структуры с названием RECORDS.
В структуре хранится реквизит - ссылка на документ.
Вопрос - как зная номер фин. счета вывести список его документов.
pas
Профи


Вступление в Клуб: 20.11.2007
СообщениеСр Май 18, 2011 16:30    Ответить с цитатой
Полезность: Нет оценки
Смотри: AC_FIN.ARC_MOVE
omela
Участник со стажем


Вступление в Клуб: 01.07.2008
СообщениеСр Май 18, 2011 21:33   Re: вопрос по работе с массивами Ответить с цитатой
Полезность: Нет оценки
tarasov-es пишет:
Здравствуйте.

Есть номер фин. счета (AC_FIN).
у AC_FIN есть реквизит Выписка по счету.
Это ссылка на массив Выписка по счету.
В массиве хранятся структуры с названием RECORDS.
В структуре хранится реквизит - ссылка на документ.
Вопрос - как зная номер фин. счета вывести список его документов.


Код:

for (
     select x
           ( af       : ref_acc                                                
           , x.[DOC]  : docum                                                   
           ) in ::[RECORDS], (::[AC_FIN] : af)
      where af.[ARC_MOVE] = x%collection
        and af.[MAIN_V_ID] { тут про ваш счет или набор счетов: =, like '%', in ()  и т.п. }
) loop
....
end loop;

_________________
Трехглазый передает привет банкирам, и желает им долгого здравия (:.
tarasov-es
Участник со стажем


Вступление в Клуб: 18.05.2011
СообщениеЧт Май 19, 2011 05:35   Re: вопрос по работе с массивами Ответить с цитатой
Полезность: Нет оценки
omela пишет:
tarasov-es пишет:
Здравствуйте.

Есть номер фин. счета (AC_FIN).
у AC_FIN есть реквизит Выписка по счету.
Это ссылка на массив Выписка по счету.
В массиве хранятся структуры с названием RECORDS.
В структуре хранится реквизит - ссылка на документ.
Вопрос - как зная номер фин. счета вывести список его документов.


Код:

for (
     select x
           ( af       : ref_acc                                                
           , x.[DOC]  : docum                                                   
           ) in ::[RECORDS], (::[AC_FIN] : af)
      where af.[ARC_MOVE] = x%collection
        and af.[MAIN_V_ID] { тут про ваш счет или набор счетов: =, like '%', in ()  и т.п. }
) loop
....
end loop;

Большое спасибо. Все получилось.
Подскажите, что обозначает символ процента и вообще конструкция x%collection?
prog
Эксперт


Вступление в Клуб: 03.03.2008
СообщениеЧт Май 19, 2011 06:14    Ответить с цитатой
Полезность: Нет оценки
Цитата из справки по PL/Plus
Цитата:
В языке PL/Plus определены дополнительные операторы для работы с объектами языка – это модификаторы. Они распознаются по символу ‘%’. Краткое описание модификаторов приводится ниже.

· %id - возвращает строковое представление значения ссылки (уникального идентификатора экземпляра – ID), к которой применен. Возвращаемый тип – строка.
· %class - возвращает короткое имя ТБП экземпляра, по ссылке на который применен. Возвращаемый тип – строка. В качестве параметра может принимать логическую константу, определяющую режим возникновения исключения в случае отсутствия экземпляра по значению ссылки (true – исключение есть, false – исключения нет), если параметр не указан, то исключение не возникнет.
· %state - возвращает короткое имя состояния (STATE_ID) экземпляра, по ссылке на который применен. Конструкции также может быть присвоено значение нового состояния экземпляра. При этом в качестве параметров можно указать короткое имя операции перехода в новое состояние (если такая операция существует) в виде строкового выражения и признак проверки прав пользователя на переход, осуществляющий изменение состояния, в виде логического выражения. Причем если второй параметр не указан, то такой проверки не происходит.
· %collection - возвращает идентификатор коллекции (COLLECTION_ID), которой принадлежит экземпляр. Возвращаемый тип – коллекция экземпляров ТБП, совпадающего с типом экземпляра, к которому применен модификатор. Как и для любой коллекции, эту конструкцию можно использовать для поиска экземпляров по логическому условию в операторах FOR/LOCATE. Конструкции также может быть присвоено значение новой коллекции. При этом экземпляр автоматически переместится в эту коллекцию.
· %classname - возвращает полное имя ТБП экземпляра, по ссылке на который применен. Возвращаемый тип – строка.
· %statename - возвращает полное имя состояния экземпляра, по ссылке на который применен. Возвращаемый тип – строка.
· %classparent - возвращает короткое имя родительского ТБП по отношению к типу экземпляра, по ссылке на который применен модификатор. Возвращаемый тип – строка.
tarasov-es
Участник со стажем


Вступление в Клуб: 18.05.2011
СообщениеЧт Май 19, 2011 06:55    Ответить с цитатой
Полезность: Нет оценки
А подскажите, есть ли
в PL/PLUS что то вроде left join

как например в pl/sql
AND A5_1.C_KL_KT#1#2 = A8_1.ID(+)
AND A5_1.C_KL_DT#1#2 = A9_1.ID(+)
prog
Эксперт


Вступление в Клуб: 03.03.2008
СообщениеЧт Май 19, 2011 07:02    Ответить с цитатой
Полезность: 1
tarasov-es пишет:
А подскажите, есть ли
в PL/PLUS что то вроде left join

как например в pl/sql
AND A5_1.C_KL_KT#1#2 = A8_1.ID(+)
AND A5_1.C_KL_DT#1#2 = A9_1.ID(+)




Код:
AND A5_1.C_KL_KT#1#2 = A8_1.ID[b](true)
AND A5_1.C_KL_DT#1#2 = A9_1.ID(true)
tarasov-es
Участник со стажем


Вступление в Клуб: 18.05.2011
СообщениеЧт Май 19, 2011 07:06    Ответить с цитатой
Полезность: Нет оценки
prog пишет:
tarasov-es пишет:
А подскажите, есть ли
в PL/PLUS что то вроде left join

как например в pl/sql
AND A5_1.C_KL_KT#1#2 = A8_1.ID(+)
AND A5_1.C_KL_DT#1#2 = A9_1.ID(+)




Код:
AND A5_1.C_KL_KT#1#2 = A8_1.ID[b](true)
AND A5_1.C_KL_DT#1#2 = A9_1.ID(true)


не работает. сообщение об ошибке говорит что
A9_1.ID(true) не имеет индексов.
tarasov-es
Участник со стажем


Вступление в Клуб: 18.05.2011
СообщениеЧт Май 19, 2011 07:11    Ответить с цитатой
Полезность: Нет оценки
tarasov-es пишет:
А подскажите, есть ли
в PL/PLUS что то вроде left join

как например в pl/sql
AND A5_1.C_KL_KT#1#2 = A8_1.ID(+)
AND A5_1.C_KL_DT#1#2 = A9_1.ID(+)



Код:
(select
            a(a.[summa]:summ,
            a.[date]:c_date,
            a.[DT]:is_d,
            md.[sum]:dt_summ,
            cl_v.[name]:cl_v_name,
            cl_r.[name]:cl_r_name)
         in   
            ::[RECORDS],
            ([MAIN_DOCUM]:md),
            ([CLIENT]:cl_v),
            ([CLIENT]:cl_r) all
       where   
            a%collection = acc.[ARC_MOVE]
              and a.[DOC]=md
              and acc.[CLIENT_V]=cl_v
              and acc.[CLIENT_R]=cl_r
              )


and acc.[CLIENT_R]=cl_r - должен сработать как бы
and acc.[CLIENT_R]=cl_r(+) вот так...
prog
Эксперт


Вступление в Клуб: 03.03.2008
СообщениеЧт Май 19, 2011 07:41    Ответить с цитатой
Полезность: Нет оценки
так попробуйте
Код:
 and acc.[CLIENT_R]=cl_r%id(true)
tarasov-es
Участник со стажем


Вступление в Клуб: 18.05.2011
СообщениеЧт Май 19, 2011 07:45    Ответить с цитатой
Полезность: Нет оценки
prog пишет:
так попробуйте
Код:
 and acc.[CLIENT_R]=cl_r%id(true)


так получается ошибка нежелательное присвоение...
prog
Эксперт


Вступление в Клуб: 03.03.2008
СообщениеЧт Май 19, 2011 07:52    Ответить с цитатой
Полезность: Нет оценки
это предупреждение. забейте.
tarasov-es
Участник со стажем


Вступление в Клуб: 18.05.2011
СообщениеЧт Май 19, 2011 07:57    Ответить с цитатой
Полезность: Нет оценки
prog пишет:
это предупреждение. забейте.

не получается так. запрос ничего не возвращает
prog
Эксперт


Вступление в Клуб: 03.03.2008
СообщениеЧт Май 19, 2011 08:08    Ответить с цитатой
Полезность: Нет оценки
полный текст запроса в студию
tarasov-es
Участник со стажем


Вступление в Клуб: 18.05.2011
СообщениеЧт Май 19, 2011 08:31    Ответить с цитатой
Полезность: Нет оценки
Код:
(select
            a(a.[summa]:summ,
            a.[date]:c_date,
            a.[DT]:is_d,
            md.[sum]:dt_summ,
            cl_v.[name]:cl_v_name--,
            --cl_r.[name]:cl_r_name
            )
         in   
            ::[RECORDS],
            ([MAIN_DOCUM]:md),
            ([CLIENT]:cl_v)--,
            --([CLIENT]:cl_r)
             all
       where   
             
            a%collection = acc.[ARC_MOVE]
              and a.[DOC]=md
              and acc.[CLIENT_V]=cl_v
              --and acc.[CLIENT_R]%id=cl_r%id(false)
              )

acc - входящий параметр - фин счет
acc.[cl_v] - ссылка на контакт - владелец
acc.[cl_r] - ссылка на контакт - клиент для расчета(бывает не всегда)
в таком виде запрос возвращает выписку по счету.
если убрать комментарии то запрос ничего не вернет
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
На страницу 1, 2  След.
Страница 1 из 2

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