powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Вызов хранимой процедуры через SQLGateway
2 сообщений из 2, страница 1 из 1
Вызов хранимой процедуры через SQLGateway
    #34686073
MaWr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На Oracle есть простейшая процедура:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create or replace package ptmp is
  procedure p1(pin in number,pout out number);
end;

create or replace package body ptmp is
  procedure p1(pin in number,pout out number) is
  begin
    pout := pin * 4;
  end;
end;

Пишу код на Cache:
Код: 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.
TMP
  N
  S Connection=##class(%Library.SQLGatewayConnection).%New()
  S RET=Connection.Connect("DSN","USER","PASSWORD")
  Q:'RET
  S RET=Connection.AllocateStatement(.Statment)
  Q:'RET
  S SQLString="begin ptmp.p1(?,?); end;"
  S Param(1)=$LB(1,4)
  S Param(2)=$LB(4,4)
  S Param(3)=$LB("","")
  S Param(4)=$LB("","")
  S Param(5)=$LB(10,10)
  S RET=Connection.BindParameters(Statment,Param(1),Param(2),Param(3),Param(4),Param(5))
  Q:'RET
  S RET=Connection.SetParameter(Statment,$LB(5),1)
  Q:'RET
  S RET=Connection.SetParameter(Statment,$LB(5),2)
  Q:'RET
  S RET=Connection.Prepare(Statment,SQLString)
  Q:'RET
  S RET=Connection.Execute(Statment)
  Q:'RET
  S RET=Connection.GetParameter(Statment,2,.VALUE)
  W $LI(VALUE),!
  ZZDUMP VALUE
  Q:'RET
  S RET=Connection.DropStatement(Statment)  
  Q:'RET
  S RET=Connection.Disconnect()
  Q
Исполняю его:
Код: plaintext
1.
2.
3.
4.
LIB>d ^TMP
12338
 
0000: 04 04 32 30                                             ..20
LIB>
То есть лист VALUE интерпретируется как числовой, а результат в нем записан в текстовом виде.
Пытался забиндить параметры как VARCHAR:
Код: plaintext
1.
2.
3.
4.
  S Param(1)=$LB(1,4)
  S Param(2)=$LB(12,12)
  S Param(3)=$LB("","")
  S Param(4)=$LB("","")
  S Param(5)=$LB(4096,4096)
не помогает. Результат то же самый.. :(
Если инициализировать выходной параметр как строковый
S RET=Connection.SetParameter(Statment,$LB("5"),2)
, то результат вообще получаем пустой:
Код: plaintext
1.
2.
3.
d ^TMP


0000: 02 01                                                   ..
При вызове функций S SQLString="begin ?:=ptmp.f1(?); end;" получаем то же самое.

Кто-нибудь сталкивался с таким? Можно это победить?
...
Рейтинг: 0 / 0
Вызов хранимой процедуры через SQLGateway
    #34688065
MaWr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поборол установкой вот такого ODBC драйвера.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Вызов хранимой процедуры через SQLGateway
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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