Это должно быть как-то связано с провайдером, потому что он отлично работает на моем устройстве dev, но не работает на другом устройстве dev.
Вот ошибка, которую я получаю на нерабочем устройстве dev:
ORA-00604: ошибка произошла на уровне рекурсивного SQL 1
ORA-06502: PL / SQL: ошибка с числовым значением или значением: буфер символьной строки слишком мал
ORA-06512: в строке 26
ORA-06550: строка 1, столбец 7:
PLS-00306: неверный номер или типы аргументов при вызове 'LISTAVAILSUBMISSIONS'
ORA-06550: строка 1, столбец 7:
PL / SQL: оператор игнорируется
Вот процедура Oracle:
Procedure ListAvailSubmissions (avail_submission in out rc_avail_submission)
is
Begin
open avail_submission for
select submission_id from nais_submissions
where condition = 'ONLINE'
and status in ('ACTIVE','LOGGED')
order by submission_id desc;
Exception
When no_data_found then
v_output := utl_file.fopen (v_errdir, v_errLog, 'a');
utl_file.put_line(v_output, to_char(sysdate,'HH24:MI:SS')||'-'||'ListAvailSubmission:Sub_id: No Data Found');
utl_file.fclose(v_output);
When others then
v_error_code := sqlcode;
v_error_message := substr (sqlerrm, 1, 300);
v_output := utl_file.fopen (v_errdir, v_errLog, 'a');
utl_file.put_line(v_output, to_char(sysdate,'HH24:MI:SS')||'-'||'ListAvailSubmission:Sub_id:'|| v_error_code ||':'|| v_error_message);
utl_file.fclose(v_output);
End ListAvailSubmissions;
Как видите, единственным параметром является возвращаемый параметр, который является результирующим набором записей
Звонок из VB довольно прост.
Public Function GetTestRequests() As ADODB.Recordset
Dim rsADO As New ADODB.Recordset
Dim cmdCommand As New ADODB.Command
Set cmdCommand.ActiveConnection = cnnADO //Ive already verified the connection is good
cmdCommand.CommandText = "ListAvailSubmissions"
Set rsADO = cmdCommand.Execute(, , adCmdStoredProc)
Set GetTestRequests = rsADO
End Function
Огорчает то, что он работает на одной машине, а не на другой. Я использую msdaora.1 в качестве провайдера и проверил, что обе машины имеют одинаковую версию MDAC, используя инструмент MS CompChecker. Я обнаружил одну вещь: если я переключу рабочую машину на использование OraOLEDB вместо msdaora.1, она выдаст ту же ошибку. Исходя из этого, я начинаю думать, что нерабочий компьютер демонстрирует правильное поведение и что мне нужно исправить код.
Я провел немало исследований и думаю, что это связано с параметром in out и пытаюсь установить ADODB.Recordset равным этому параметру. Я попытался изменить параметр только на out, но это не помогло, но все еще получала ту же ошибку.
Любая помощь приветствуется, эта ошибка сводит меня с ума.