powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / SQL & классы
14 сообщений из 14, страница 1 из 1
SQL & классы
    #36754090
Alexei Zaycev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть таблица T, в ней есть поле V.
тип поля V - пользовательский класс С, который насколько понимаю ни на какую отдельную таблицу не отображается.
у класса С есть поле V1 и метод M1() возвращающий, допустим, строку

как SQL запросом (никак не могу вкурить синтаксис) из таблицы Т вытащить из каждого экземпляра, сидящего в поле V, поля V1 и результат возвращаемый методом M1()

ЗЫ. сори за сумбурное объяснение - с ОО СУБД работаю почти что впервые

Я не падаю. Я так летаю.
Каждый летает как умеет.
...
Рейтинг: 0 / 0
SQL & классы
    #36754173
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вам нужно сделать вычисляемое поле и вычислять его этим методом.
Напрямую методы объекта в SQL вызвать нельзя.
...
Рейтинг: 0 / 0
SQL & классы
    #36754189
Alexei Zaycev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блок А.Н.,

хорошо, опустим обращение к методу.
можно ли вытащить в запросе поле V1 из экземпляра класса С, хранящегося в поле V таблицы Т?
...
Рейтинг: 0 / 0
SQL & классы
    #36754236
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexei Zaycev,

Было бы неплохо увидеть структуру Ваших классов.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Class test.T Extends %Persistent
{

Property V As test.C; // [Transient]; в случае, когда класс С - зарегистрированный

}

Class test.C Extends  %Persistent //или %SerialObject или %RegisteredObject
{

Property V1 As %Integer;

Property MCalc As %String [Calculated, SqlComputed, SqlComputeCode = {set {*}=##class(test.C).M1()}];

ClassMethod M1() As %String 
{
	quit "Строка"
}
}

На метод M1() необходимо сделать вычисляемое поле, например MCalc. Или сделать метод M1() ещё и хранимой процедурой.

Если класс С - хранимый, то
Код: plaintext
select V->V1,V->MCalc from test.T

Если класс С - сериализуемый, то
Код: plaintext
select V_V1,V_MCalc from test.T

Если класс С - зарегистрированный (не хранимый), то через SQL - никак, так как SQL работает только с классами так или иначе хранимыми в БД.
The Object-SQL Projection for Class Members
...
Рейтинг: 0 / 0
SQL & классы
    #36754281
Alexei Zaycev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servit,

класс С - сериализуемый (C Extends %SerialObject)
попробовал select V_V1 from T
результат - "ОШИБКА #5540 SQLCODE -29 Поле V_V1 не найдено в обрабатываемых таблицах"
просто select V from T работает, выдавая конечно фигню (конвертит к строке экземпляр)
...
Рейтинг: 0 / 0
SQL & классы
    #36754307
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexei Zaycev,

Поэтому и прошу исходники структуры Ваших классов.
Ошибка возникает скорее всего из-за того, что в БД уже были сохранены какие-то данные, но другого типа.

PS: структура хранения данных очень сильно зависит от того, какой класс Вы используете.
...
Рейтинг: 0 / 0
SQL & классы
    #36754326
Alexei Zaycev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servit,

увы я не разработчик системы и исходников у меня нету - есть работающая развернутая система
я просто пытаюсь вытащить данные из нее
...
Рейтинг: 0 / 0
SQL & классы
    #36754458
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Структуру классов можно посмотреть с помощью Caché Documatic , структуру данных - с помощью Портала .

PS: конечно, лучше всего обратиться к разработчикам системы, так как, возможно, доступ к некоторым данным через SQL не был предусмотрен.
...
Рейтинг: 0 / 0
SQL & классы
    #36754528
Alexei Zaycev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servit,

структура данных - таблица Test.T
Код: plaintext
1.
Column 	Datatype 	Column # 	Required 	Unique 	Collation 	Hidden 	MaxLen 	BLOB 	Container 	Selectivity 	xDBC Type 	ReferenceTo
V	Test.C		1		No		No	 		No	 	No	 		0.0695%		VARCHAR	

структура класса - Test.С
Код: plaintext
1.
2.
3.
4.
serial class Test.C  extends %SerialObject, %XML.Adaptor 
...
property V1 as %String;
...
method M1() as %String 
...
Рейтинг: 0 / 0
SQL & классы
    #36754654
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читайте данные, используя объекты, а не SQL.
...
Рейтинг: 0 / 0
SQL & классы
    #36754697
Alexei Zaycev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servit,

к сожалению данные могу тягать только удаленно подключившись по ODBC а при таком раскладе, как я понимаю, только SQL был возможен
что ж, печально...
...
Рейтинг: 0 / 0
SQL & классы
    #36754945
Turk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Судя по ODBC-типу, в V хранится строка. Может запрос по полю V тогда просто вернет значение V1? (Никогда не пользовался %SerialObject с одним полем, поэтому точно не знаю.)
...
Рейтинг: 0 / 0
SQL & классы
    #36755035
Alexei Zaycev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Turk,

строка-строкой но на выходе там явно не V1 а бинарная каша
...
Рейтинг: 0 / 0
SQL & классы
    #36755198
Turk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexei ZaycevTurk,

строка-строкой но на выходе там явно не V1 а бинарная каша
А если попробовать так:
Код: plaintext
select $listget(V, 1 ) from Test.T
Вместо 1 там может быть другой индекс, если в классе Test.C специфичный способ хранения.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / SQL & классы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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