powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Методы класса для внешних выражений SQL
6 сообщений из 6, страница 1 из 1
Методы класса для внешних выражений SQL
    #36985056
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно ли использовать методы классов в SQL?
Если можно, то как?
Писать вызов через мас-программу можно, но лишнее звено не нравится.
...
Рейтинг: 0 / 0
Методы класса для внешних выражений SQL
    #36985063
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н. , ты про такое?

Код: plaintext
1.
2.
3.
select ##class(<имя_класса>).<имя_метода>(<список_параметров>) from tmp.test
...
select * from tmp.test where ##class(<имя_класса>).<имя_метода>(<список_параметров>)= 1 
...
Рейтинг: 0 / 0
Методы класса для внешних выражений SQL
    #36985065
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
/// <b>Список работников</b>
/// <table>
/// <tr>
/// <td><b>Id</b></td>
/// <td><i>ИД работы</i></td>
/// </table>
ClassMethod AllMember(Id As %String) As %String [ SqlProc ]
{
	s Member=""
	s dlm=", "
	s sql="Select Member->Name as Memb From wrk.Stage Where Job=? Group by Member Order by Member->Prg desc,Member->Name"
	s ors=##class(%ResultSet).%New("%DynamicQuery:SQL")
	s ok=ors.Prepare(sql)
	s:ok ok=ors.Execute(Id)
	s i= 0 
	while ors.Next() {
		s:ors.Get("Memb")'="" $p(Member,dlm,$i(i))=ors.Get("Memb")
	}
	d ors.Close()
	q Member
}
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
/// Построение запроса для отображения таблицы
Method CrtSQL(Output tSC As %Status, pInfo As %ZEN.Auxiliary.QueryInfo) As %ResultSet
{
	Set tRS = ""
	
	Set tSC = $$$OK
	Set tSELECT = "ID,Name,"
	Set tSELECT = tSELECT_"wrk.Job_AllMember(ID) as Member,"
	Set tSELECT = tSELECT_"dEnd as Brk,"
	Set tSELECT = tSELECT_"wrk.Plan_KvrToStr(Plan->ID) as Kvartal,"
	Set tSELECT = tSELECT_"wrk.Job_Ok(ID) as Ok"
	Set tFROM = "wrk.Job as a"
	Set tWHERE = ""
	Set tORDER = "dCreate desc,Member"
	// строим критерии отбора по фильтрам
	If $g(pInfo.filters("Name"))'="" {
		Set tWHERE = tWHERE_"Upper(Name) [ Upper('"_pInfo.filters("Name")_"') "
	}
	If $g(pInfo.filters("Member"))'="" {
		Set:tWHERE'="" tWHERE=tWHERE_" AND "
		Set tWHERE=tWHERE_"wrk.Job_AllMember(ID)['"_ pInfo.filters("Member")_"'"
	}
	If $g(pInfo.filters("Ok"))'="" {
		Set:tWHERE'="" tWHERE=tWHERE_" AND "
		s ok="<>"
		s:pInfo.filters("Ok")="Да" ok="="
		Set tWHERE=tWHERE_"wrk.Job_Ok(ID)"_ok_"'Да'"
	}
	Set sql = "SELECT " _ tSELECT _ " FROM " _ tFROM
	Set:tWHERE'="" sql = sql _ " WHERE " _tWHERE
	Set:tORDER'="" sql = sql _ " ORDER BY " _tORDER
	Set tRS = ##class(%ResultSet).%New()
	Set tSC = tRS.Prepare(sql)
	Set pInfo.queryText = sql
	Quit tRS
}
...
Рейтинг: 0 / 0
Методы класса для внешних выражений SQL
    #36985097
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. все дело в [sqlproc]?

Спасибо огромное!
Смешно, что я на самом деле две таких функции перерабатывал для внешних систем, но так и не понял, зачем это надо и с чем его едят. А оно ни на что плохо не повлияет? т.е. можно такие функции использовать и в обычных программах?
...
Рейтинг: 0 / 0
Методы класса для внешних выражений SQL
    #36985121
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Т.е. все дело в [sqlproc]?
Ну это частный пример конечно...
sqlproc ы ведь не обязательно с кащейским кодом будут...

Блок А.Н.А оно ни на что плохо не повлияет? т.е. можно такие функции использовать и в обычных программах?
Вот потестил - работает

Код: plaintext
1.
2.
ERR>w ##class(wrk.Job).AllMember( 9 )
Разуваева З.М., Сазонова Т.М.
ERR>
...
Рейтинг: 0 / 0
Методы класса для внешних выражений SQL
    #36985805
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Т.е. все дело в [sqlproc]?
А оно ни на что плохо не повлияет? т.е. можно такие функции использовать и в обычных программах?
Методы класса, используемые и как Хранимые Процедуры, можно использовать не только из программ, но и в SQL.
К тому же в Портале можно разграничить доступ к этим Хранимым Процедурам.

PS: кроме http://docs.intersystems.com/cache20102/csp/docbook/DocBook.UI.Page.cls?KEY=GSQL_procedures#GSQL_C9622][SqlProc] ещё удобно использовать http://docs.intersystems.com/cache20102/csp/docbook/DocBook.UI.Page.cls?KEY=BGJD_coding#BGJD_coding_statements_multiplesets][ReturnResultsets] , особенно из Java/.NET, когда нужно вернуть несколько наборов данных за раз.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Методы класса для внешних выражений SQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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