powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Есть ли метод формирующий ключевое выражение индекса класса для экземпляра?
25 сообщений из 52, страница 2 из 3
Есть ли метод формирующий ключевое выражение индекса класса для экземпляра?
    #38236060
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit , я вообще ничего не знаю про индекс... Только его идентификатор. Т.о. я не знаю нужен %SQLUPPER(Field,5) или там что-то еще...

Но цепанусь за SQL...
Тут я знаю:
- сам запрос (т.е. SQL текст)
- и текущий ИД (они цифровые, стандартное формирование)

Предыдущую строку запроса я наверное не получу... Или можно получить?
Вроде есть вариант взять следующую?
...
Рейтинг: 0 / 0
Есть ли метод формирующий ключевое выражение индекса класса для экземпляра?
    #38236062
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa Хочу узнать предыдущий ИД и следующий.

Вроде ранее все расписал...Для меня это новая информация.

krvsaТак и не понял из того аглицкого описания что таки делаэт эти методы?
Напишите пожалуйста по русски...
Set person = ##class(Sample.Person).SSNKeyOpen("111-22-3333",2,.sc)
Поскольку SSNKey является уникальным индексом, Вы имеете возможность открыть экземпляр не по ID через %OpenId() , а по значению поля SSN, не прибегая к SQL.

Set success = ##class(Sample.Person).SSNKeyExists("111-22-3333",.id)
Соответственно проверяется наличие записи со значением в поле SSN, используя уникальный индекс. Если запись существует вернётся истина и ID этой записи (экземпляра класса).
...
Рейтинг: 0 / 0
Есть ли метод формирующий ключевое выражение индекса класса для экземпляра?
    #38236065
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот примерно такое я знаю

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
sqlQuit() /* SQL-функция для причин увольнения (последнее местоработы) */
	n sql,flt
	s sql="Select *, "
	s sql=sql_"a.name as article, "
	s sql=sql_"r.name as reason "
	s sql=sql_"From "
	s sql=sql_"soi_arh_data.quit as q "
	s sql=sql_"left join soi_arh_data.article as a On a.code=q.quitArticle "
	s sql=sql_"left join soi_arh_data.reason as r On r.code=q.quitReason "
	s sql=sql_"Where registration=? "
 	s flt=$$filter^|mvrNS|mvr.sys.fnc(Table,View)
 	s:flt'="" sql=sql_"And "_flt_" "
	s sql=sql_"Order by "
	s sql=sql_"dat"
	q sql



Знаю текущий ИД...
Есть какой-то вариант сделать навигацию "вперед" и "назад" по этому запросу?
...
Рейтинг: 0 / 0
Есть ли метод формирующий ключевое выражение индекса класса для экземпляра?
    #38236068
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitSet person = ##class(Sample.Person).SSNKeyOpen("111-22-3333",2,.sc)
Поскольку SSNKey является уникальным индексом, Вы имеете возможность открыть экземпляр не по ID через %OpenId() , а по значению поля SSN, не прибегая к SQL.
Тогда зачем 2 и 3-тий параметры?

servitSet success = ##class(Sample.Person).SSNKeyExists("111-22-3333",.id)
Соответственно проверяется наличие записи со значением в поле SSN, используя уникальный индекс. Если запись существует вернётся истина и ID этой записи (экземпляра класса).
Ясно, спасибо.
...
Рейтинг: 0 / 0
Есть ли метод формирующий ключевое выражение индекса класса для экземпляра?
    #38236119
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaТогда зачем 2 и 3-тий параметры?Второй параметр - concurrency .
Третий параметр - статус операции. Например, в случае отсутствия указанного экземпляра будет содержать ошибку.
krvsa servit , я вообще ничего не знаю про индекс... Только его идентификатор. Т.о. я не знаю нужен %SQLUPPER(Field,5) или там что-то еще...krvsaЗнаю текущий ИД...
Есть какой-то вариант сделать навигацию "вперед" и "назад" по этому запросу?С этого и стоило начать.

%vid (с версии 2011.1)

%ScrollableResultSet (примеры использования уже приводились, например 6698559 )
...
Рейтинг: 0 / 0
Есть ли метод формирующий ключевое выражение индекса класса для экземпляра?
    #38236126
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitС этого и стоило начать.
Это не начало, это т.с. продолжение.
Про индекс интерес остаётся...
...
Рейтинг: 0 / 0
Есть ли метод формирующий ключевое выражение индекса класса для экземпляра?
    #38236147
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit %vid (с версии 2011.1)

%ScrollableResultSet (примеры использования уже приводились, например 6698559 )

Не совсем понял как это может помочь взять предыдущий и следующий элемент/строку некоего запроса...

%ScrollableResultSet вообще примеры только с классовыми запросами... Как его применять к динамическим запросам?
...
Рейтинг: 0 / 0
Есть ли метод формирующий ключевое выражение индекса класса для экземпляра?
    #38236148
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про %vid можно по русски рассказать? Или пример какой для иллюстрации? Из документации мало чего понял...
...
Рейтинг: 0 / 0
Есть ли метод формирующий ключевое выражение индекса класса для экземпляра?
    #38236154
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В документации используют

Код: sql
1.
SELECT *, %vid FROM (SELECT ....) v WHERE %vid BETWEEN 5 AND 10



Как понять

Код: sql
1.
v WHERE


Что это за "v"?
...
Рейтинг: 0 / 0
Есть ли метод формирующий ключевое выражение индекса класса для экземпляра?
    #38236156
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaЭто не начало, это т.с. продолжение.
Про индекс интерес остаётся...
Код: plaintext
1.
2.
^classNameI("indexName"," QWE",8)=""
^classNameI("indexName"," QWE",12)=""
^classNameI("indexName"," QWE",30)=""

То есть, зная className, indexName и ID=12, Вы хотите получить:
1) значение " QWE"
2) предыдущее (8) и следующее (30) значение ID

Если уникальных значений для индексируемого поля немного, возможно будет проще обойти глобал ^classNameI?
...
Рейтинг: 0 / 0
Есть ли метод формирующий ключевое выражение индекса класса для экземпляра?
    #38236201
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitТо есть, зная className, indexName и ID=12, Вы хотите получить:
1) значение " QWE"
2) предыдущее (8) и следующее (30) значение ID
Да.
Но это частный случай... В общем же я даже не знаю как вообще будет выглядеть то " QWE" ... Есть варианты:
- " QWE"
- "QWE"
- " QwE"
и т.п...

servitЕсли уникальных значений для индексируемого поля немного ...
Я не могу знать сколько их...

servitвозможно будет проще обойти глобал ^classNameI?
По нему я и пойду. Мне нужна т.с. "отправная точка". А это либо "ключевое выражение"... Или имя всего глобала для этого экземпляра, что подойдет для всех типов индекса.
...
Рейтинг: 0 / 0
Есть ли метод формирующий ключевое выражение индекса класса для экземпляра?
    #38236205
ser_shu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servit,
я так понимаю, что krvsa хочет получить " QWE", зная "indexName",
но не зная типа индекса (сортировки)...
...
Рейтинг: 0 / 0
Есть ли метод формирующий ключевое выражение индекса класса для экземпляра?
    #38236219
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ser_shuservit,
я так понимаю, что krvsa хочет получить " QWE", зная "indexName",
но не зная типа индекса (сортировки)...Я это уже понял 14206770
...
Рейтинг: 0 / 0
Есть ли метод формирующий ключевое выражение индекса класса для экземпляра?
    #38236229
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaЧто это за "v"?Алиас представления: по аналогии с select field1 as alias1,(select 1) as v from table1 as tkrvsaПро %vid можно по русски рассказать? Или пример какой для иллюстрации? Из документации мало чего понял... %vid - номер строки в представлении. Удобно использовать для порционного вывода данных, например:select *,%vid "Номер строки" from (select 'Строка1' as n union select 'Строка2' union select 'Строка3') as vРезультатnНомер строкиСтрока11Строка22Строка33select *,%vid "Номер строки" from (select 'Строка1' as n union select 'Строка2' union select 'Строка3') as v where %vid between 2 and 3РезультатnНомер строкиСтрока22Строка33
...
Рейтинг: 0 / 0
Есть ли метод формирующий ключевое выражение индекса класса для экземпляра?
    #38236262
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa%ScrollableResultSet вообще примеры только с классовыми запросами... Как его применять к динамическим запросам? %ScrollableResultSet наследуется от %ResultSet , поэтому ответ таков: как для %ResultSet .

%ScrollableResultSet позволяет сохранить результат запроса во временный ( ^CacheTemp* ) глобал (aka режим snapshot) и затем иметь возможность бегать по результирующим записям в обоих направлениях.
...
Рейтинг: 0 / 0
Есть ли метод формирующий ключевое выражение индекса класса для экземпляра?
    #38236286
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaЯ не могу знать сколько их...
<...>
По нему я и пойду. Мне нужна т.с. "отправная точка". А это либо "ключевое выражение"... Или имя всего глобала для этого экземпляра, что подойдет для всех типов индекса.Отправная точка понадобится в любом случае, если записей очень много.
Чтобы на этапе runtime не вычислять каждый раз через рефлексию тип и сортировку индекса, проще будет написать свой метод-генератор, вычисляющий значение указанного индекса по заданному ID.
Код метода-генератора будет сформирован ещё на этапе компиляции и возможных типов сортировок не так уж много, поэтому не должно быть проблем с производительностью.
...
Рейтинг: 0 / 0
Есть ли метод формирующий ключевое выражение индекса класса для экземпляра?
    #38236418
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit %vid - номер строки в представлении.
Ясно.
Спасибо за подробнейшие примеры!

Если я правильно понял, мой селект нужно поместить в скобки?
...
Рейтинг: 0 / 0
Есть ли метод формирующий ключевое выражение индекса класса для экземпляра?
    #38236423
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit %ScrollableResultSet наследуется от %ResultSet , поэтому ответ таков: как для %ResultSet .
Так и не понял как все же использовать?
Примерчик покажешь?
...
Рейтинг: 0 / 0
Есть ли метод формирующий ключевое выражение индекса класса для экземпляра?
    #38236426
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitпроще будет написать свой метод-генератор, вычисляющий значение указанного индекса по заданному ID.
Так вот до этого и не хотелось бы "опускаться"...
...
Рейтинг: 0 / 0
Есть ли метод формирующий ключевое выражение индекса класса для экземпляра?
    #38236436
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaservit %ScrollableResultSet наследуется от %ResultSet , поэтому ответ таков: как для %ResultSet .
Так и не понял как все же использовать?
Примерчик покажешь?
Вот например как тут вывести определённые строки (пример просто копирнул из како-то программки)?

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
	s sql="Select * "
	s sql=sql_"from mvr_data.listCol "
	s sql=sql_"where listTbl->name = ? "
	s sql=sql_"AND (notView =0 Or notView is Null) "
	s sql=sql_"AND listTbl->tableCls->name = ? "
	s sql=sql_"AND listTbl->tableCls->task->name = ? "
	s sql=sql_"ORDER BY sort"	
	s o=##class(%ResultSet.SQL).%Prepare(sql,.err,"",View,Table,task)
	&html<<tr>>
		&html<<td class='mvr_list_linetyp'>>
			&html<>
		&html<</td>>
	while o.%Next() {
		d FINDCOL
	}
	&html<</tr>>
	k o
...
Рейтинг: 0 / 0
Есть ли метод формирующий ключевое выражение индекса класса для экземпляра?
    #38236571
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaТак и не понял как все же использовать?
Примерчик покажешь?  s rs=##class(%ScrollableResultSet).%New()
  d rs.Prepare("select *,%vid ""Номер строки"" from (select 'Строка1' as n union select 'Строка2' union select 'Строка3') as v")
  d rs.Execute()
  d rs.%Display()
  
  w !,"---",!
  s rs.CurrRow=1
  d rs.%Display()
  
  w !,"---",!
  while rs.Previous() {d rs.%Print()}Результат:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
n       Номер строки
Строка1 1
Строка2 2
Строка3 3
 
3 Rows(s) Affected
---
n       Номер строки
Строка2 2
Строка3 3
 
3 Rows(s) Affected
---
Строка3 3
Строка2 2
Строка1 1

krvsaЕсли я правильно понял, мой селект нужно поместить в скобки?Да, примерно так: select * from (Ваш запрос) where %vid ...
...
Рейтинг: 0 / 0
Есть ли метод формирующий ключевое выражение индекса класса для экземпляра?
    #38236590
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit , огромнейшее тебе спасибо!
Все потестировал - все это даёт мне максимум возможностей для решения задачи.
...
Рейтинг: 0 / 0
Есть ли метод формирующий ключевое выражение индекса класса для экземпляра?
    #38254912
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitДа, примерно так: select * from (Ваш запрос) where %vid ...
Рано я радовался...

Поскольку во FROM нет возможности использовать ORDER BY, из моего запроса берутся "первые" N-строк и только потом применяется сортировка...

Вот что хотелось бы полистать...
Код: sql
1.
SELECT * FROM mvr_data.tableCls WHERE task->name=? ORDER BY description


Преобразовываю в
Код: sql
1.
Select %vid,* From (SELECT * FROM mvr_data.tableCls WHERE task->name=? ) Where %vid between ? and ? ORDER BY description



В итоге просто кусками выбирается информация и только после этого кусок сортируется...

Может есть какой-то вариант, когда можно сначала сортировать и только после этого взять нужный кусок?
...
Рейтинг: 0 / 0
Есть ли метод формирующий ключевое выражение индекса класса для экземпляра?
    #38254921
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пробовал и так...
Код: sql
1.
Select * From (SELECT * FROM mvr_data.tableCls WHERE task->name=? ) Where %vid between ? and ? ORDER BY description


без разницы...
...
Рейтинг: 0 / 0
Есть ли метод формирующий ключевое выражение индекса класса для экземпляра?
    #38255247
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.ч. пока переделал на %ScrollableResultSet...
...
Рейтинг: 0 / 0
25 сообщений из 52, страница 2 из 3
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Есть ли метод формирующий ключевое выражение индекса класса для экземпляра?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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