|
Хранимая процедура возвращает пусто...
|
|||
---|---|---|---|
#18+
Что-то не пойму почему хранимая процедура возвращает пусто... Есть такая процедурка/// ФИО гражданина /// <table> /// <tr> /// <td><b>Urn</b></td> /// <td>Urn гражданина</td> /// </tr> /// <tr> /// <td><b>Date</b></td> /// <td>На какую дату</td> /// </tr> /// <tr> /// <td><b>Type</b></td> /// <td>0-Ф|И|О, 1-фамилия, 2-имя, 3-отчество, 4-фамилия и инициалы, 5-инициалы и фамилия</td> /// </tr> /// </table> ClassMethod name(Urn As %String, Date As %Date, Type As %Integer) As %String [ SqlProc ] { s:$g(Date)="" Date=+$h s Type=$g(Type) s sql="Select * " s sql=sql_" From soi_arh_data_cls.name as a" s sql=sql_" Where a.parent in (" s sql=sql_" Select b.urn" s sql=sql_" From soi_arh_data.name as b" s sql=sql_" Where b.citizen=?" s sql=sql_" )" s sql=sql_" And a.Dat<=?" s sql=sql_" Order by Dat desc" s o=##class(%ResultSet.SQL).%Prepare(sql,.err,"",Urn,Date) s ^tmp(Urn)=o s name="" s dlm="|" if o.%Next() { s ^tmp(Urn,1)=o.%Get("surname") s $p(name,dlm)=o.%Get("surname") s $p(name,dlm,2)=o.%Get("name") s $p(name,dlm,3)=o.%Get("patronymic") } k o q:Type=0 name q:Type>3 $$nameShort(Type-3) q:Type $p(name,dlm,Type) q $tr(name,dlm," ") nameShort(Type) // Фимилия + инициалы s str=$p(name,dlm) s str1="" s val=$p(name,dlm,2) s:val'="" str1=$e(val)_"." s val=$p(name,dlm,3) s:val'="" str1=str1_$e(val)_"." i Type=1 s:str1'="" str=str_" "_str1 i Type=2 s:str1'="" str=str1_" "_str q str } Нормально работает с командной строки Код: vbnet 1. 2.
А в запросе возвращает пустоту (см.картинку)Select soi_arh_data.citizen_name(urn) as fio, * From soi_arh_data.citizen ---------- Cache for Windows (x86-64) 2010.2.3 (Build 702) Tue Feb 15 2011 14:20:27 EST Cache for Windows (x86-64) 2012.1.1 (Build 602) Wed Mar 7 2012 22:36:34 EST ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 09:18 |
|
Хранимая процедура возвращает пусто...
|
|||
---|---|---|---|
#18+
Делал тестовую запись в глобал ^tmp - запрос выполняется Код: vbnet 1.
Но в if o.%Next() { s ^tmp(Urn,1)=o.%Get("surname") s $p(name,dlm)=o.%Get("surname") s $p(name,dlm,2)=o.%Get("name") s $p(name,dlm,3)=o.%Get("patronymic") } уже не попадает... Почему тогда с командной строки все работает как надо? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 09:21 |
|
Хранимая процедура возвращает пусто...
|
|||
---|---|---|---|
#18+
Потестил сейчас из портала - работает! Значит дело все в связке Cache+Delphi... Это там процедурка возвращает пусто... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 09:31 |
|
Хранимая процедура возвращает пусто...
|
|||
---|---|---|---|
#18+
Возможно, режим даты стоит не такой. Исключите дату из запроса и проверьте. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 09:44 |
|
Хранимая процедура возвращает пусто...
|
|||
---|---|---|---|
#18+
Блок А.Н.Возможно, режим даты стоит не такой. Исключите дату из запроса и проверьте. О, спасибо. В запросе используется хоролог... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 10:04 |
|
Хранимая процедура возвращает пусто...
|
|||
---|---|---|---|
#18+
Блок А.Н. , да, это дата. А как сделать универсальный вариант по дате? Дабы работала в связке Cache+Delphi и просто Cache? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 10:11 |
|
Хранимая процедура возвращает пусто...
|
|||
---|---|---|---|
#18+
Параметр чёле вводить... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 10:12 |
|
Хранимая процедура возвращает пусто...
|
|||
---|---|---|---|
#18+
Он как-то переключается через какие-то ZU. Попробуйте еще d $system.SQL.SetSelectMode(...) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 10:33 |
|
Хранимая процедура возвращает пусто...
|
|||
---|---|---|---|
#18+
Блок А.Н.Он как-то переключается через какие-то ZU. Попробуйте еще d $system.SQL.SetSelectMode(...) А что из этого дока0 LOGICAL 1 ODBC 2 DISPLAY Нужно для использования хоролога? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 10:42 |
|
Хранимая процедура возвращает пусто...
|
|||
---|---|---|---|
#18+
Logical В портале же есть селектор ;-) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 10:44 |
|
Хранимая процедура возвращает пусто...
|
|||
---|---|---|---|
#18+
krvsa, то же наступал на эти грабли с датами, пришел к такому решению: все что на клиенте, неважно каком, перевожу в хоролог а запрос формирую так: "... where TONUMBER(date)=:dateParam" ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 11:50 |
|
Хранимая процедура возвращает пусто...
|
|||
---|---|---|---|
#18+
Блок А.Н.Logical Ясно. Блок А.Н.В портале же есть селектор ;-) Дык я там и не бываю... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 11:56 |
|
Хранимая процедура возвращает пусто...
|
|||
---|---|---|---|
#18+
krvsa , Всё дело в контексте вызова. Если запустите метод из терминала, то $system.SQL.GetSelectMode() = 0 Если как ХП, то $system.SQL.GetSelectMode() = 1 Select Mode Поскольку используете класс %ResultSet.SQL , в котором свойство %RuntimeMode приватное, то остаётся вариант предложенный Блок А.Н. . PS: ещё проверьте формат получаемого параметра Date : возможно, в одном случае он приходит в виде 62900, а в другом - "2013-03-19". ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 11:57 |
|
Хранимая процедура возвращает пусто...
|
|||
---|---|---|---|
#18+
Ymka2007пришел к такому решению: все что на клиенте, неважно каком, перевожу в хоролог а запрос формирую так: "... where TONUMBER(date)=:dateParam" Так у меня хранимая процедура будет выполняться не только на клиенте но и в "Каше"... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 11:58 |
|
Хранимая процедура возвращает пусто...
|
|||
---|---|---|---|
#18+
Ymka2007все что на клиенте, неважно каком, перевожу в хоролог а запрос формирую так: "... where TONUMBER(date)=:dateParam"Плохое решение. Если есть индекс на дату, то он в таком случае не будет задействован. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 12:00 |
|
Хранимая процедура возвращает пусто...
|
|||
---|---|---|---|
#18+
servitещё проверьте формат получаемого параметра Date : возможно, в одном случае он приходит в виде 62900, а в другом - "2013-03-19". В моём примере дата не передаётся вообще... Она там явно присваивается Код: vbnet 1.
От того и непонятки... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 12:02 |
|
Хранимая процедура возвращает пусто...
|
|||
---|---|---|---|
#18+
servitЕсли запустите метод из терминала, то Код: vbnet 1.
А я думал нужно как параметр передавать Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 12:04 |
|
Хранимая процедура возвращает пусто...
|
|||
---|---|---|---|
#18+
krvsa , Для чего это: Date As %Date, Type As %Integer? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 12:05 |
|
Хранимая процедура возвращает пусто...
|
|||
---|---|---|---|
#18+
krvsaА я думал нужно как параметр передавать http://docs.intersystems.com/cache20122/csp/documatic/%25CSP.Documatic.cls?PAGE=CLASS&LIBRARY=%25SYS&CLASSNAME=%25SYSTEM.SQL#GetSelectMode] Get SelectMode http://docs.intersystems.com/cache20122/csp/documatic/%25CSP.Documatic.cls?PAGE=CLASS&LIBRARY=%25SYS&CLASSNAME=%25SYSTEM.SQL#SetSelectMode] Set SelectMode ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 12:08 |
|
Хранимая процедура возвращает пусто...
|
|||
---|---|---|---|
#18+
servitДля чего это: Date As %Date, Type As %Integer? Где? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 12:10 |
|
Хранимая процедура возвращает пусто...
|
|||
---|---|---|---|
#18+
servitДля чего это: Date As %Date, Type As %Integer? А! Понял... Это на тот случай если дату таки передадут. Но впримерах выше я специально её не передаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 12:11 |
|
Хранимая процедура возвращает пусто...
|
|||
---|---|---|---|
#18+
Вот так работает! Код: vbnet 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. 36. 37. 38.
Код: vbnet 1.
Помогло. Осталось проверить как передаётся дата и переделать её в хоролог, если нужно. Спасибо всем за помощь!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 12:14 |
|
Хранимая процедура возвращает пусто...
|
|||
---|---|---|---|
#18+
servitпроверьте формат получаемого параметра Date : возможно, в одном случае он приходит в виде 62900, а в другом - "2013-03-19". Только два варианта возможны? Или их больше? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 12:53 |
|
Хранимая процедура возвращает пусто...
|
|||
---|---|---|---|
#18+
krvsaТолько два варианта возможны? Или их больше?Больше. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 12:57 |
|
Хранимая процедура возвращает пусто...
|
|||
---|---|---|---|
#18+
servitБольше. Фигово... Придется параметр вводить - формат даты... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 13:03 |
|
Хранимая процедура возвращает пусто...
|
|||
---|---|---|---|
#18+
krvsaПридется параметр вводить - формат даты...Не нужно. Достаточно передавать дату в требуемом формате и проверять её валидность перед использованием. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 13:28 |
|
Хранимая процедура возвращает пусто...
|
|||
---|---|---|---|
#18+
servitНе нужно. Достаточно передавать дату в требуемом формате и проверять её валидность перед использованием. Я не могу контролировать что сунут в ту хранимую процедуру... Да и проверять на валидность не всегда можно. Пример 02/01/20013 Это 2-е января или 1-е февраля? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 13:34 |
|
Хранимая процедура возвращает пусто...
|
|||
---|---|---|---|
#18+
krvsaЯ не могу контролировать что сунут в ту хранимую процедуру...В таком случае передавайте дату как строку, т. е. Date As %String, в ODBC-формате, а в коде делайте её приведение $zdh("2013-03-01",3) с обработкой ошибок. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 13:41 |
|
Хранимая процедура возвращает пусто...
|
|||
---|---|---|---|
#18+
servitВ таком случае передавайте дату как строку, т. е. Date As %String, в ODBC-формате, а в коде делайте её приведение $zdh("2013-03-01",3) с обработкой ошибок. Лады, спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 13:54 |
|
Хранимая процедура возвращает пусто...
|
|||
---|---|---|---|
#18+
На этом пока остановлюсь... Код: vbnet 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. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54.
P.S. Модерам: Зря разукрашиваете код в сообщениях... При копировании все эти цветовые потроха мешают. А копировать с экрана - отсутствуют правильные отступы, да и шрифт для программ не подходящий... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 13:58 |
|
Хранимая процедура возвращает пусто...
|
|||
---|---|---|---|
#18+
servit krvsa , Всё дело в контексте вызова. Если запустите метод из терминала, то $system.SQL.GetSelectMode() = 0 Если как ХП, то $system.SQL.GetSelectMode() = 1 Select Mode Поскольку используете класс %ResultSet.SQL , в котором свойство %RuntimeMode приватное, то остаётся вариант предложенный Блок А.Н. . PS: ещё проверьте формат получаемого параметра Date : возможно, в одном случае он приходит в виде 62900, а в другом - "2013-03-19". Да, и почему не используете %SQL.Statement ? Он удобнее6 быстрее работает и %SelectMode свойство есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 15:11 |
|
Хранимая процедура возвращает пусто...
|
|||
---|---|---|---|
#18+
krvsaМодерам: Зря разукрашиваете код в сообщениях... При копировании все эти цветовые потроха мешают. А копировать с экрана - отсутствуют правильные отступы, да и шрифт для программ не подходящий...Сомневаюсь, что им настолько нечего делать Раскрашивает код движок форума, к которому у них нет доступа. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 15:20 |
|
Хранимая процедура возвращает пусто...
|
|||
---|---|---|---|
#18+
Блок А.Н.Сомневаюсь, что им настолько нечего делать Раскрашивает код движок форума, к которому у них нет доступа. Напрасно сомневаешся... Посмотри моё первое сообщение в теме - это не расскараска движка. То рука модера! ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 15:33 |
|
Хранимая процедура возвращает пусто...
|
|||
---|---|---|---|
#18+
Шваров ЕвгенийДа, и почему не используете %SQL.Statement ? Он удобнее6 быстрее работает и %SelectMode свойство есть. Даже не знаю что и ответить... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 15:34 |
|
Хранимая процедура возвращает пусто...
|
|||
---|---|---|---|
#18+
Шваров ЕвгенийОн удобнее Не совсем понял про удобство... Можно использовать более удобно чем Код: vbnet 1.
Тогда как еще удобнее? Шваров Евгенийбыстрее работает А тут-то в чем быстрота проявляется? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 15:39 |
|
Хранимая процедура возвращает пусто...
|
|||
---|---|---|---|
#18+
Блок А.Н.Сомневаюсь, что им настолько нечего делать Раскрашивает код движок форума, к которому у них нет доступа.krvsaНапрасно сомневаешся... krvsa дело говорит: 13425888 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 15:46 |
|
Хранимая процедура возвращает пусто...
|
|||
---|---|---|---|
#18+
krvsaНе совсем понял про удобство... Можно использовать более удобно чемkrvsaТогда как еще удобнее?Ссылку я уже давал выше: 14066344 Можно менять режим выборки или на уровне всего процесса (для %ResultSet.SQL) или на уровне конкретного объекта %SQL.Statement . krvsaА тут-то в чем быстрота проявляется?Не столько быстрота, сколько возможности и рекомендации самой InterSystems: Старые классы Result Set (первые пять предложений) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 16:12 |
|
Хранимая процедура возвращает пусто...
|
|||
---|---|---|---|
#18+
servitМожно менять режим выборки или на уровне всего процесса (для %ResultSet.SQL) или на уровне конкретного объекта %SQL.Statement . Про режим я понял... А вот про какой-то "объект" не совсем. И в аглицком я не силён... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 16:51 |
|
|
start [/forum/topic.php?all=1&fid=39&tid=1557207]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
152ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
others: | 254ms |
total: | 517ms |
0 / 0 |