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

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

Код: 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
30.11.2010, 08:58
    #36985097
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Методы класса для внешних выражений SQL
Т.е. все дело в [sqlproc]?

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

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

Код: plaintext
1.
2.
ERR>w ##class(wrk.Job).AllMember( 9 )
Разуваева З.М., Сазонова Т.М.
ERR>
...
Рейтинг: 0 / 0
30.11.2010, 13:03
    #36985805
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Методы класса для внешних выражений SQL
Блок А.Н.Т.е. все дело в [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
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Методы класса для внешних выражений SQL / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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