问题是这样的偶的一个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;

解决方案 »

  1.   

    这个问题应该是在存储过程找原因.
    模拟一下输入的参数,在pl/sql developer或者toad之类的工具调试一下就知道了.
    看提示不就是输入的参数类型不匹配嘛
      

  2.   

    如果我没记错的话,oracle number和varchar2有时是可以共用的,
    比如表定义的是number但查询条件用的是varchar2结果不会错,只是一些相关的索引会被破坏掉.
    有可能是这样,在10G环境下字符串会自动帮你转成数字型,但是9i就不一定会,这只是我的猜测.
      

  3.   

    回一楼,偶已经把SP简化成只有两个输入参数,SP主体什么都没有,只返回一个字符串~~~~这样也错
      

  4.   


    TX:
    oracle 的sp, return不能返回值的吧???怎么感觉写的像sqlserver呢  不知你那怎么成功的,我的oracle 10g 存储过程return 都不能 赋值返回,用的都是输出参数。仅供参考