powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Хранимая процедура возвращает пусто...
25 сообщений из 38, страница 1 из 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
25 сообщений из 38, страница 1 из 2
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Хранимая процедура возвращает пусто...
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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