Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Обработка объектов в SQL запросе / 5 сообщений из 5, страница 1 из 1
08.10.2011, 06:08
    #37473790
shilo_tebe
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка объектов в SQL запросе
Здравствуйте!
Столкнулся с проблемой и, к сожалению, сам разобраться не смог(в силу ли ограниченности сроков, ну или по собственной глупости, не знаю), поэтому прошу совета.

Возможно ли используя реляционную модель доступа получить атрибуты объектов, сохраненных в списке %List в одной из колонок таблицы. Иными словами, обращаюсь к некоей таблице
Код: plaintext
select table.field from table
, где поле table.field - список объектов следующей стркутуры:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Class MyClass Extends (%SerialObject, %Populate, %XML.Adaptor) [ Inheritance = right ]
{
Property p1 As %String(MAXLEN =  200 );
Property p2 As %Date;
Property p3 As %Date;
Property p4 As %String;
Property p5 As %String;
Property p6 As %String;
Property p7 As %String;
}

Ну как бы из списка их достать проблемы нет:
Код: plaintext
select $LIST(table.field, position) from table
, а вот с обработкой объектов, извлеченных из списка проблема.
В принципе доступ к атрибутам этих объектов именно в запросе - не самоцель, вполне приемлем вариант, когда объект будет читаться как массив байт, а уже в приложении ( приложение разрабатывается на джаве) как-либо обработан, но и это вариант реализовать не смог, поскольку столкнулся с cache' в первый раз и средства работы с данной субд, прямо говоря, не знаю.

Буду признателен за любые советы или ссылки на соответствующую документацию или литературу (пара перелистанных учебных курсов, не помогли, поскольку освещали либо COS, либо Studio, а интересует программный доступ и, желательно, через реляционную модель, дизайн-то менять не охота)
Версия cache' - 2010.2.4.802.1
Заранее спасибо)
...
Рейтинг: 0 / 0
09.10.2011, 15:26
    #37474604
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка объектов в SQL запросе
shilo_tebe ,

Дано:
Class test.b Extends %SerialObject
{

Property p1 As %String(MAXLEN = 200);

Property p2 As %Date;

Property p3 As %Date;

Property p4 As %String;

Property p5 As %String;

Property p6 As %String;

Property p7 As %String;

}

Class test.a Extends %Persistent
{

Property field As list Of test.b;

ClassMethod Fill()
{
  do ##class(test.a).%KillExtent()
  
  set a=##class(test.a).%New()
  for i=1:1:10 {
    set b=##class(test.b).%New()
    set b.p1="p1_"_i
    set b.p2=i
    set b.p3=i+1
    set b.p4="p4_"_i
    set b.p5="p5_"_i
    set b.p6="p6_"_i
    set b.p7="p7_"_i
    do a.field.Insert(b)
  }
  do a.%Save(0)
}

}

Получение значения поля p5 из объекта под седьмым номером в списке, хранящегося в поле field:
select $LIST($LIST($LIST(field, 7),1),5) from test.a -- вернётся "p5_7"

PS: посмотрите в Портале как хранятся данные в глобале ^test.aD
...
Рейтинг: 0 / 0
09.10.2011, 19:09
    #37474706
shilo_tebe
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка объектов в SQL запросе
servit,

Спасибо! Подробно расскажу о том, как воспользовался вашим советом, когда буду иметь доступ к базе, а именно часов через 15.
...
Рейтинг: 0 / 0
10.10.2011, 05:37
    #37474960
shilo_tebe
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка объектов в SQL запросе
servit,

Еще раз спасибо, разобрался в вашем примере, действительно все оказалось достаточно просто, однако не совсем очевидно, для человека, с каше столкнувшегося в первый раз (т.е меня). Честно сказать начинаю осознавать, что объектная и реляционные технологии не так уж очевидно смешиваются, особенно в сознании людей)))
...
Рейтинг: 0 / 0
10.10.2011, 08:02
    #37474985
Turk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка объектов в SQL запросе
shilo_tebe ,
Одно уточнение по ответу servit :
Данный способ работает только для объектов, унаследованных от %SerialObject, т.е. хранящихся непосредственно в записи таблицы test.a.
Если же элементом списка является ссылка (ID) на внешний объект (хранимую таблицу), то обратиться напрямую (через $LIST или стрелку) к атрибутам этого объекта нельзя. В этом случае нужно будет пользоваться стандартными механизмами связывания таблиц через SQL.
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Обработка объектов в SQL запросе / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]