Выходной параметр пуст при вызове процедуры пакета Oracle с использованием Oracle ADO в VBScript - PullRequest
0 голосов
/ 22 октября 2018

Мне нужно вызвать процедуру пакета Oracle из VBScript (из приложения PowerDesigner).Это 64-разрядное приложение, поэтому я использую 64-разрядный драйвер ODBC для Oracle (клиент Oracle 12.1.0.2).

Работа должна выполняться с использованием следующего кода, который выполняется без ошибок, но выходные значения пусты:

Const ORAUser = "****"               
Const ORAPass = "****"     
Const ORASchema = "****"           
Const ORAInst = "****"                    
Const ORADRV  = "Oracle in OraClient12Home1"
Const ADO_CMD_STORED_PROC = 4

Dim Conn, ConnString, CmdStoredProc

Set Conn = CreateObject("ADODB.Connection")
ConnString = "Driver={" + ORADRV + "};Dbq=" + ORAInst + ";Uid=" + ORAUser + ";Pwd=" + ORAPass + ";"
Conn.Open ConnString

Set CmdStoredProc = CreateObject("ADODB.Command")
With CmdStoredProc
  Set .ActiveConnection = Conn
  .CommandText = ORASchema & ".PDLOCKS_ADMIN.VBS_TEST"
  .CommandType = ADO_CMD_STORED_PROC
  .Parameters.Append CmdStoredProc.CreateParameter("i_input_num", 5, 1, 0, 1) 
  .Parameters.Append CmdStoredProc.CreateParameter("i_input_vchar", 200, 1, 4000, "1") 
  .Parameters.Append CmdStoredProc.CreateParameter("o_output_num", 5, 2, 0)
  .Parameters.Append CmdStoredProc.CreateParameter("o_output_vchar", 200, 2, 4000)
  .Execute
  Output .Parameters("o_output_num").Value ' EMPTY :-(
  Output .Parameters(2) ' EMPTY :-(
End With  

Conn.Close
Set Conn = Nothing
Set CmdStoredProc = Nothing

В пакете базы данных Oracle все обрабатывается правильно, а входные и выходные параметры сохраняются в таблице TEST:

PROCEDURE VBS_TEST (
  i_input_num    in  number
 ,i_input_vchar  in varchar2
 ,o_output_num   out number
 ,o_output_vchar out varchar2
)
IS
BEGIN
  insert into test values (to_char(i_input_num) || i_input_vchar);
  o_output_num := i_input_num + 1;
  o_output_vchar := i_input_vchar || '1';
  insert into test values (to_char(o_output_num) || o_output_vchar);
  commit;
END;
...