powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Хранимая процедура возвращает пусто...
38 сообщений из 38, показаны все 2 страниц
Хранимая процедура возвращает пусто...
    #38189021
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то не пойму почему хранимая процедура возвращает пусто...

Есть такая процедурка/// ФИО гражданина
/// <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.
CHB>w ##class(soi.arh.data.citizen).name("ARD-2013-1")
ДЗЮБА РАИСА ИВАНОВНА


А в запросе возвращает пустоту (см.картинку)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
...
Рейтинг: 0 / 0
Хранимая процедура возвращает пусто...
    #38189024
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делал тестовую запись в глобал ^tmp - запрос выполняется
Код: vbnet
1.
^tmp("ARD-2013-1")="4@%ResultSet.Result"


Но в 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")
 }
уже не попадает...

Почему тогда с командной строки все работает как надо?
...
Рейтинг: 0 / 0
Хранимая процедура возвращает пусто...
    #38189043
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потестил сейчас из портала - работает!

Значит дело все в связке Cache+Delphi... Это там процедурка возвращает пусто...
...
Рейтинг: 0 / 0
Хранимая процедура возвращает пусто...
    #38189055
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно, режим даты стоит не такой. Исключите дату из запроса и проверьте.
...
Рейтинг: 0 / 0
Хранимая процедура возвращает пусто...
    #38189073
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Возможно, режим даты стоит не такой. Исключите дату из запроса и проверьте.
О, спасибо.
В запросе используется хоролог...
...
Рейтинг: 0 / 0
Хранимая процедура возвращает пусто...
    #38189083
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н. , да, это дата.

А как сделать универсальный вариант по дате? Дабы работала в связке Cache+Delphi и просто Cache?
...
Рейтинг: 0 / 0
Хранимая процедура возвращает пусто...
    #38189084
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Параметр чёле вводить...
...
Рейтинг: 0 / 0
Хранимая процедура возвращает пусто...
    #38189122
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Он как-то переключается через какие-то ZU.
Попробуйте еще
d $system.SQL.SetSelectMode(...)
...
Рейтинг: 0 / 0
Хранимая процедура возвращает пусто...
    #38189142
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Он как-то переключается через какие-то ZU.
Попробуйте еще
d $system.SQL.SetSelectMode(...)
А что из этого
дока0 LOGICAL
1 ODBC
2 DISPLAY
Нужно для использования хоролога?
...
Рейтинг: 0 / 0
Хранимая процедура возвращает пусто...
    #38189147
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Logical

В портале же есть селектор ;-)
...
Рейтинг: 0 / 0
Хранимая процедура возвращает пусто...
    #38189296
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa,

то же наступал на эти грабли с датами,
пришел к такому решению:
все что на клиенте, неважно каком, перевожу в хоролог
а запрос формирую так: "... where TONUMBER(date)=:dateParam"
...
Рейтинг: 0 / 0
Хранимая процедура возвращает пусто...
    #38189311
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Logical
Ясно.

Блок А.Н.В портале же есть селектор ;-)
Дык я там и не бываю...
...
Рейтинг: 0 / 0
Хранимая процедура возвращает пусто...
    #38189313
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa ,

Всё дело в контексте вызова.

Если запустите метод из терминала, то
$system.SQL.GetSelectMode() = 0

Если как ХП, то
$system.SQL.GetSelectMode() = 1

Select Mode

Поскольку используете класс %ResultSet.SQL , в котором свойство %RuntimeMode приватное, то остаётся вариант предложенный Блок А.Н. .

PS: ещё проверьте формат получаемого параметра Date : возможно, в одном случае он приходит в виде 62900, а в другом - "2013-03-19".
...
Рейтинг: 0 / 0
Хранимая процедура возвращает пусто...
    #38189318
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ymka2007пришел к такому решению:
все что на клиенте, неважно каком, перевожу в хоролог
а запрос формирую так: "... where TONUMBER(date)=:dateParam"
Так у меня хранимая процедура будет выполняться не только на клиенте но и в "Каше"...
...
Рейтинг: 0 / 0
Хранимая процедура возвращает пусто...
    #38189323
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ymka2007все что на клиенте, неважно каком, перевожу в хоролог
а запрос формирую так: "... where TONUMBER(date)=:dateParam"Плохое решение.
Если есть индекс на дату, то он в таком случае не будет задействован.
...
Рейтинг: 0 / 0
Хранимая процедура возвращает пусто...
    #38189335
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitещё проверьте формат получаемого параметра Date : возможно, в одном случае он приходит в виде 62900, а в другом - "2013-03-19".
В моём примере дата не передаётся вообще... Она там явно присваивается

Код: vbnet
1.
s:$g(Date)="" Date=+$h



От того и непонятки...
...
Рейтинг: 0 / 0
Хранимая процедура возвращает пусто...
    #38189347
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitЕсли запустите метод из терминала, то
Код: vbnet
1.
$system.SQL.GetSelectMode() = 0


А я думал нужно как параметр передавать

Код: vbnet
1.
d $system.SQL.GetSelectMode(0)
...
Рейтинг: 0 / 0
Хранимая процедура возвращает пусто...
    #38189350
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa ,

Для чего это: Date As %Date, Type As %Integer?
...
Рейтинг: 0 / 0
Хранимая процедура возвращает пусто...
    #38189362
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Хранимая процедура возвращает пусто...
    #38189366
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitДля чего это: Date As %Date, Type As %Integer?
Где?
...
Рейтинг: 0 / 0
Хранимая процедура возвращает пусто...
    #38189370
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitДля чего это: Date As %Date, Type As %Integer?
А! Понял...
Это на тот случай если дату таки передадут. Но впримерах выше я специально её не передаю.
...
Рейтинг: 0 / 0
Хранимая процедура возвращает пусто...
    #38189382
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так работает!

Код: 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.
ClassMethod name(Urn As %String, Date As %Date, Type As %Integer) As %String [ SqlProc ]
{
	s:$g(Date)="" Date=+$h
	s Type=$g(Type)
	d $system.SQL.SetSelectMode(0)
	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 name=""
	s dlm="|"
	if o.%Next() {
		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.
d $system.SQL.SetSelectMode(0)


Помогло.

Осталось проверить как передаётся дата и переделать её в хоролог, если нужно.

Спасибо всем за помощь!!!
...
Рейтинг: 0 / 0
Хранимая процедура возвращает пусто...
    #38189491
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitпроверьте формат получаемого параметра Date : возможно, в одном случае он приходит в виде 62900, а в другом - "2013-03-19".
Только два варианта возможны? Или их больше?
...
Рейтинг: 0 / 0
Хранимая процедура возвращает пусто...
    #38189499
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaТолько два варианта возможны? Или их больше?Больше.
...
Рейтинг: 0 / 0
Хранимая процедура возвращает пусто...
    #38189522
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitБольше.
Фигово...
Придется параметр вводить - формат даты...
...
Рейтинг: 0 / 0
Хранимая процедура возвращает пусто...
    #38189596
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaПридется параметр вводить - формат даты...Не нужно.
Достаточно передавать дату в требуемом формате и проверять её валидность перед использованием.
...
Рейтинг: 0 / 0
Хранимая процедура возвращает пусто...
    #38189610
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitНе нужно.
Достаточно передавать дату в требуемом формате и проверять её валидность перед использованием.
Я не могу контролировать что сунут в ту хранимую процедуру... Да и проверять на валидность не всегда можно.
Пример
02/01/20013
Это 2-е января или 1-е февраля?
...
Рейтинг: 0 / 0
Хранимая процедура возвращает пусто...
    #38189642
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaЯ не могу контролировать что сунут в ту хранимую процедуру...В таком случае передавайте дату как строку, т. е. Date As %String, в ODBC-формате, а в коде делайте её приведение $zdh("2013-03-01",3) с обработкой ошибок.
...
Рейтинг: 0 / 0
Хранимая процедура возвращает пусто...
    #38189689
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitВ таком случае передавайте дату как строку, т. е. Date As %String, в ODBC-формате, а в коде делайте её приведение $zdh("2013-03-01",3) с обработкой ошибок.
Лады, спасибо.
...
Рейтинг: 0 / 0
Хранимая процедура возвращает пусто...
    #38189703
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На этом пока остановлюсь...
Код: 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.
/// ФИО гражданина
/// <table>
/// <tr>
/// <td><b>Urn</b></td>
/// <td>Urn гражданина</td>
/// </tr>
/// <tr>
/// <td><b>Date</b></td>
/// <td>На какую дату (формат ODBC или хоролог)</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 %String, Type As %Integer) As %String [ SqlProc ]
{
	s:$g(Date)="" Date=+$h
	s Type=$g(Type)
	s:Date["-" Date=$zdh("2013-03-01",3)
	d $system.SQL.SetSelectMode(0)
	s sql="Select Top 1 * "
	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 name=""
	s dlm="|"
	if o.%Next() {
		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
}


P.S.
Модерам: Зря разукрашиваете код в сообщениях... При копировании все эти цветовые потроха мешают. А копировать с экрана - отсутствуют правильные отступы, да и шрифт для программ не подходящий...
...
Рейтинг: 0 / 0
Хранимая процедура возвращает пусто...
    #38189874
Шваров Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 свойство есть.
...
Рейтинг: 0 / 0
Хранимая процедура возвращает пусто...
    #38189893
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaМодерам: Зря разукрашиваете код в сообщениях... При копировании все эти цветовые потроха мешают. А копировать с экрана - отсутствуют правильные отступы, да и шрифт для программ не подходящий...Сомневаюсь, что им настолько нечего делать
Раскрашивает код движок форума, к которому у них нет доступа.
...
Рейтинг: 0 / 0
Хранимая процедура возвращает пусто...
    #38189913
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Сомневаюсь, что им настолько нечего делать
Раскрашивает код движок форума, к которому у них нет доступа.
Напрасно сомневаешся...
Посмотри моё первое сообщение в теме - это не расскараска движка. То рука модера!
...
Рейтинг: 0 / 0
Хранимая процедура возвращает пусто...
    #38189918
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шваров ЕвгенийДа, и почему не используете %SQL.Statement ? Он удобнее6 быстрее работает и %SelectMode свойство есть.
Даже не знаю что и ответить...
...
Рейтинг: 0 / 0
Хранимая процедура возвращает пусто...
    #38189929
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шваров ЕвгенийОн удобнее
Не совсем понял про удобство... Можно использовать более удобно чем
Код: vbnet
1.
d $system.SQL.SetSelectMode(0)


Тогда как еще удобнее?

Шваров Евгенийбыстрее работает
А тут-то в чем быстрота проявляется?
...
Рейтинг: 0 / 0
Хранимая процедура возвращает пусто...
    #38189946
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Сомневаюсь, что им настолько нечего делать
Раскрашивает код движок форума, к которому у них нет доступа.krvsaНапрасно сомневаешся... krvsa дело говорит: 13425888
...
Рейтинг: 0 / 0
Хранимая процедура возвращает пусто...
    #38190011
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaНе совсем понял про удобство... Можно использовать более удобно чемkrvsaТогда как еще удобнее?Ссылку я уже давал выше: 14066344
Можно менять режим выборки или на уровне всего процесса (для %ResultSet.SQL) или на уровне конкретного объекта %SQL.Statement .
krvsaА тут-то в чем быстрота проявляется?Не столько быстрота, сколько возможности и рекомендации самой InterSystems: Старые классы Result Set (первые пять предложений)
...
Рейтинг: 0 / 0
Хранимая процедура возвращает пусто...
    #38190120
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitМожно менять режим выборки или на уровне всего процесса (для %ResultSet.SQL) или на уровне конкретного объекта %SQL.Statement .
Про режим я понял... А вот про какой-то "объект" не совсем. И в аглицком я не силён...
...
Рейтинг: 0 / 0
38 сообщений из 38, показаны все 2 страниц
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Хранимая процедура возвращает пусто...
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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