Неверный список параметров процедуры оракула - PullRequest
0 голосов
/ 14 декабря 2011

У меня процедура оракула, описанная так:

create or replace procedure "TEST_PROC" (
  param1 IN VARCHAR2, 
  param2 IN VARCHAR2, 
  output OUT BOOLEAN) is 
begin 
  output := True; 
end;

У меня есть код vb6, который заполняет параметры ввода / вывода следующим образом:

...
Set conn = CreateObject("ADODB.Connection")
conn.ConnectionString = "Provider=MSDAORA; ...
...

cmd.CommandText = "TEST_PROC"
cmd.CommandType = 4 'adCmdStoredProc

Dim v As String
v = "some-value"        
cmd.Parameters.Append cmd.CreateParameter("param1", 200, 1, 255, v)
cmd.Parameters.Append cmd.CreateParameter("param2", 200, 1, 255, v)
cmd.Parameters.Append cmd.CreateParameter("output", 11, 2, 1, 0)

cmd.Execute

Но он завершается при выполнении с ошибкой:

PLS-00306: wrong number or types of arguments in call to 'TEST_PROC'  

Что здесь не так? Заранее спасибо!

1 Ответ

2 голосов
/ 14 декабря 2011

Я думаю, что ваша проблема с типом данных BOOLEAN в процедуре.BOOLEAN - это не тип базы данных, это тип PL / SQL, и ADO знает только о типах баз данных.Чтобы проверить это, замените выходной параметр BOOLEAN на NUMBER или VARCHAR и посмотрите, сможете ли вы получить результат из этого.В качестве альтернативы, оберните эту процедуру в другую процедуру, которая переводит BOOLEAN в другой тип:

CREATE OR REPLACE PROCEDURE WRAP_PROC (param1 IN VARCHAR2
                                     , param2 IN VARCHAR2
                                     , output OUT INTEGER) IS
  v_out BOOLEAN;
BEGIN
  test_proc(param1, param2, v_out);
  IF v_out = TRUE THEN
    output := 1;
  ELSE
    output := 0;
  END IF;
END wrap_proc;
/ 
...