Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Вызов хранимой процедуры через SQLGateway / 2 сообщений из 2, страница 1 из 1
26.07.2007, 14:40
    #34686073
MaWr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов хранимой процедуры через SQLGateway
На 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
27.07.2007, 10:48
    #34688065
MaWr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов хранимой процедуры через SQLGateway
Поборол установкой вот такого ODBC драйвера.
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Вызов хранимой процедуры через SQLGateway / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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