这必须以某种方式与提供者相关,因为它在我的开发盒上工作正常但在另一个开发盒上不起作用。
以下是我在非工作开发框中遇到的错误:
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;
如您所见,唯一的参数是return参数,它是结果记录集
来自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作为提供程序,我已经使用MS CompChecker工具验证了两台机器具有相同的MDAC版本。我发现的一件事是,如果我将工作机器切换到使用OraOLEDB而不是msdaora.1,它将抛出相同的错误。基于此,我开始认为非工作机器表现出正确的行为,我需要修复代码。
我做了很多研究,我认为它与输出参数有关,并试图将ADODB.Recordset设置为等于参数。我尝试将参数更改为仅,但这没有帮助,仍然有同样的错误。
感谢任何帮助,这个错误让我疯狂。
答案 0 :(得分:1)
我认为表中的一个字符串超出了OLEDB字符串限制。对于不同的驱动程序,此限制的定义不同 - 因此您会看到一个驱动程序发出错误而另一个驱我相信,这个限制也可以在逐个机器的基础上进行配置,因此您可以使用一台机器,而不是一台机器。
检查结果集中的任何字符串是否长于256个字符或某些字符串。然后从结果集中省略该记录,看它是否有效。