powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Добавить условие в select в хранимую процедуру через входной параметр
17 сообщений из 17, страница 1 из 1
Добавить условие в select в хранимую процедуру через входной параметр
    #39733734
druzhok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, пожалуйста, как в хранимую процедуру через входной параметр добавить в where свое условие?

У меня в классе cache есть хранимая процедура
Код: java
1.
ClassMethod OFREPORTS66GETSQL(dt1 As %Date = NULL, dt2 As %Date = NULL, condition As %String) As %String [ SqlName = OFREPORTS66GETSQL, SqlProc ]


Внутри у нее длинный select:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
s SQLText = " Select "_
	" a.Schet_Balance_id, a.SCHET_BALANCE_CODE, a.CARD_NO, a.INVENT_NO, "_
	" a.ID_BACards, a.Card, a.NAME_FULL, a.Cipher_ID, a.Cipher_CODE, a.SROK_POLEZ_ISPOLZ, "_
	" DATEDIFF('yy',a.DOC_VVODA_V_EXPL_DATA,'"_dt2_"') SROK_FACT, "_
....................................продолжение...................................
" WHERE DATEPART('yy',Document->RegDate) = DATEPART('yy','"_dt1_"')"_
" BAFR_GET_RUSH_CODE(1,Card->Rush->CODE,Card->RushOffBudget->CODE,ISNULL(SummaBudget,0),ISNULL(SummaOffBudget,0)) RUSH_ALL_CODE,"_
" AND DATEPART('yy',a.DOC_VVODA_V_EXPL_DATA)>2006 "_
condition_
" GROUP BY a.REFMOL_ID,a.Card,a.Schet_Balance_id"_	
	" HAVING (SUM(a.KOLICHNACH)<>0 or SUM(a.KOLICHOST)<>0)"	
	s ^A=SQLText		
	q SQLText



Дату и условия я формирую в fastreporte (дата тип Date из DateEdit, а condition типа String из Edit например( 'AND a.RUSH_ALL_CODE='2/2' ')), в ADOQuery вызываю процедуру CALL OFREPORTS66GETSQL(:dt1,:dt2,:condition) и передаю значения.

Дата подставляется в select хорошо , а вот condition типа String не хочет. Можно ли в процедуре cache в select подставить входной параметр типа String?
...
Рейтинг: 0 / 0
Добавить условие в select в хранимую процедуру через входной параметр
    #39733815
vassil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вам следует использовать ODBC формат.
Дату передавать в формате '2018-11-16'

И при выполнении запроса указывать что выражение в ODBC формате.

Код: sql
1.
2.
 SET tStatement = ##class(%SQL.Statement).%New()
 SET tStatement.%SelectMode=1 // ODBC
...
Рейтинг: 0 / 0
Добавить условие в select в хранимую процедуру через входной параметр
    #39733818
vassil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
" AND DATEPART('yy',a.DOC_VVODA_V_EXPL_DATA)>2006 "_
condition_
" GROUP BY a.REFMOL_ID,a.Card,a.Schet_Balance_id"_



А что это за bb?
Код: sql
1.
 


Наверно должно быть так?

Код: sql
1.
2.
3.
" AND DATEPART('yy',a.DOC_VVODA_V_EXPL_DATA)>2006 "
 _condition
 _ " GROUP BY a.REFMOL_ID,a.Card,a.Schet_Balance_id"_
...
Рейтинг: 0 / 0
Добавить условие в select в хранимую процедуру через входной параметр
    #39733843
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
druzhok Дата подставляется в select хорошо, а вот condition типа String не хочет. Вы дату не подставляете , вы ее вклеиваете ... в 2018 ... :\
Код: vbnet
1.
2.
3.
4.
5.
6.
s sql($i(sql)) = "Select ... From ... "
s sql($i(sql)) = " Where datefield1 = ? ", qp($i(qp)) = date1 // qp - query params
s sql($i(sql)) = condition
s sql($i(sql)) = " And datefield2 = ? ", qp($i(qp)) = date2
s rs = ##class(%SQL.Statement).%ExecDirect( .stm, .sql, qp... )
d rs.%Display()
...
Рейтинг: 0 / 0
Добавить условие в select в хранимую процедуру через входной параметр
    #39733867
druzhok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vassil, хотел жирным выделить
...
Рейтинг: 0 / 0
Добавить условие в select в хранимую процедуру через входной параметр
    #39733868
druzhok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
doublefint,
а можно ли полностью условие вклеить
Код: sql
1.
AND a.Field IN (c1, c2)

у меня просто на форме если пользователь отметил несколько позиций, тогда нужно вставить
Код: sql
1.
AND a.Field IN (c1, c2)

, а если одну позицию тогда
Код: sql
1.
AND a.Field = c1

ну и если ничего не выбрано тогда ничего не вставляем?
...
Рейтинг: 0 / 0
Добавить условие в select в хранимую процедуру через входной параметр
    #39733869
logist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
druzhok,

А в ^A condition подставляется? Похоже, что оно не работает на этапе передачи, а не на этапе формирования строки. Попробуйте сделать ^B=condition -- похоже, что оно пустое и надо разбираться что происходит на уровне выше.

Тот код что Вы привели похож на правильный, и все должно корректно подставляться. Не забывайте, что подстановка кода - большая дыра в безопасности.
...
Рейтинг: 0 / 0
Добавить условие в select в хранимую процедуру через входной параметр
    #39733870
druzhok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я имею ввиду чтобы динамически можно было формировать select
...
Рейтинг: 0 / 0
Добавить условие в select в хранимую процедуру через входной параметр
    #39733871
logist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
druzhok,

Ну его и можно динамически формировать -- похоже что в сам метод пустое условие передается.
...
Рейтинг: 0 / 0
Добавить условие в select в хранимую процедуру через входной параметр
    #39733872
vassil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Добавить условие в select в хранимую процедуру через входной параметр
    #39733873
logist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vassil,

Да вроде у топик стартера как раз с датой нет проблем


druzhokДата подставляется в select хорошо
...
Рейтинг: 0 / 0
Добавить условие в select в хранимую процедуру через входной параметр
    #39733876
druzhok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С датой все отлично, проблемы с присоединением условия.
...
Рейтинг: 0 / 0
Добавить условие в select в хранимую процедуру через входной параметр
    #39733877
logist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
druzhok,

Ну так оно в метод то передается?
...
Рейтинг: 0 / 0
Добавить условие в select в хранимую процедуру через входной параметр
    #39733878
vassil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
druzhok,

А точно, не так предложение прочитал)
...
Рейтинг: 0 / 0
Добавить условие в select в хранимую процедуру через входной параметр
    #39733900
druzhok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
logist,

да, действительно, ничего не передается, подскажите, может перекомпилить надо, у меня задача изменить уже давно написанный класс, раньше вызывали из fastreporta запрос
Код: sql
1.
Query OFREPORTS66GETDATA(dt1 As %Date = NULL, dt2 As %Date = NULL) As %Query ............

затем в классе вызывали метод
Код: sql
1.
ClassMethod OFREPORTS66GETDATAExecute(ByRef qHandle As %Binary, dt1 As %Date = NULL, dt2 As %Date = NULL) As %Status

, а внутри него вызов метода где формируется select, в который мне нужно подсунуть условие
Код: sql
1.
2.
3.
4.
5.
6.
s rs=##class(%Library.ScrollableResultSet).%New("%DynamicQuery:SQL")
	s sql3=##class(FW.OFREPORTS66).OFREPORTS66GETSQL(dt1,dt2)
	s ok=rs.Prepare(sql3)
	s ok=rs.Execute()	
	s cnt=rs.Count()
..............................


я добавил в запрос и в два метода третий параметр
Код: sql
1.
Query OFREPORTS66GETDATA(dt1 As %Date = NULL, dt2 As %Date = NULL, condition As %String) As %Query ............


Код: sql
1.
ClassMethod OFREPORTS66GETDATAExecute(ByRef qHandle As %Binary, dt1 As %Date = NULL, dt2 As %Date = NULL, condition As %String) As %Status


Код: sql
1.
OFREPORTS66GETSQL(dt1 As %Date = NULL, dt2 As %Date = NULL, condition As %String) As %String



При вызове OFREPORTS66GETSQL() из ClassMethod OFREPORTS66GETDATAExecute c тремя параметрами переданными вручную, в select добавляются условия, а вот при вызове из fastreporta почему то в метод OFREPORTS66GETDATAExecute() третий параметр не передается?
Еще нашел в программе какие то CacheSql с ошибкой на скрине ниже
...
Рейтинг: 0 / 0
Добавить условие в select в хранимую процедуру через входной параметр
    #39734116
druzhok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все, решил, созад новый класс и методы с тремя параметрами, все заработало. Видно, после компиляции cache где то запоминает, что метод только с двумя параметрами и не хочет 3-ий подставлять.
...
Рейтинг: 0 / 0
Добавить условие в select в хранимую процедуру через входной параметр
    #39735891
logist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
druzhok,

Может помочь удаление кешированных запросов

https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=GSQLOPT_cachedqueries#GSQLOPT_cachedqueries_purge
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Добавить условие в select в хранимую процедуру через входной параметр
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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