问题是这样的偶的一个DEPHI6的程序中有一段代码是使用TSQLStoredProc调用存储过程的,在以往使用是正常的但是最近出现如题问题测试如下数据库为ORACLE 10g 本机ORACLE 10g 的客户端 运行是成功的然后本机改联另一个ORACLE 9i的数据库时,只要一调用SP(如果有一个以上的输入参数)就报“ORA-06502: PL/SQL: numeric or value error: character string buffer too small”错误如果把这个SP 输入参数去掉,光留输出参数还能正常运行请问这个问题如果解决
tmpSQLConnection ***********
tmpSQLSP := TSQLStoredProc.Create(nil);
with tmpSQLSP do
begin
Active := false;
SQLConnection := tmpSQLConnection;
tmpSQLSP.StoredProcName := 'SP_XXXX';
ParamCheck := true;
ParamByName('X1').Value := '111';
ParamByName('X2').Value := '222';
tmpSQLSP.ExecProc;
strtmp := tmpSQLSP.ParamByName('RESULT').Value;
end;
tmpSQLSP.Active := false;
tmpSQLSP.Free;
tmpSQLConnection.Free;
tmpSQLConnection ***********
tmpSQLSP := TSQLStoredProc.Create(nil);
with tmpSQLSP do
begin
Active := false;
SQLConnection := tmpSQLConnection;
tmpSQLSP.StoredProcName := 'SP_XXXX';
ParamCheck := true;
ParamByName('X1').Value := '111';
ParamByName('X2').Value := '222';
tmpSQLSP.ExecProc;
strtmp := tmpSQLSP.ParamByName('RESULT').Value;
end;
tmpSQLSP.Active := false;
tmpSQLSP.Free;
tmpSQLConnection.Free;
模拟一下输入的参数,在pl/sql developer或者toad之类的工具调试一下就知道了.
看提示不就是输入的参数类型不匹配嘛
比如表定义的是number但查询条件用的是varchar2结果不会错,只是一些相关的索引会被破坏掉.
有可能是这样,在10G环境下字符串会自动帮你转成数字型,但是9i就不一定会,这只是我的猜测.
TX:
oracle 的sp, return不能返回值的吧???怎么感觉写的像sqlserver呢 不知你那怎么成功的,我的oracle 10g 存储过程return 都不能 赋值返回,用的都是输出参数。仅供参考