存储过程在PL/SQL上执行没有问题:
declare 
  corpid varchar2(50);
  shortNumber varchar2(50);
  memberid varchar2(50);
  memberName varchar2(50);
  adminFlag number;
  P_RETVAL NUMBER;begin 
  corpid := '3510000001';
  shortNumber := '6727';
  memberid := '03554015';
  memberName := 'X';
  adminFlag := 0;
  operation := 1;       
  
  PROC_SYNC_MEMBER(operation,corpid,shortNumber,memberid,memberName,adminFlag,'','JVCBdv3eODg',10,10,2000000,P_RETVAL);
end;我在delphi中使用StoredProc调用该存储过程:
从StoredProc1的params属性中可以看到有12个参数,我觉得应该表示控件连接没有问题吧。然后代码:
StoredProc1.close;
storedproc1.Params[0].Value:=1;
storedproc2.Params[1].Value:=cor;//cor 是程序中声明的string型变量,已赋值
……
StoredProc1.open;
另外,从StoredProc1的params属性中可以看到第一个参数的类型DataType=ftfloat;ParamType=ptInput;第二个参数的DataType=ftmemo;ParamType=ptInput;在执行的过程中,当到了storedproc1.Params[0].Value:=1;这行时,就报错提示:index out of bound(0);
我后来试了StoredProc1.Params.Items[0].Asfloat:=1;的赋值方式,一样报错。
按说这是越界错误,可是已经可以看到存储过程中有12个参数啊,众位大虾,如何是好?

解决方案 »

  1.   

    create or replace procedure aa( i int,j out varchar2 )
    is
    begin
      j:='111';
    end;
      with self.ADOStoredProc1 do
      begin
        ProcedureName:='aa';
        Parameters.Clear;
        Parameters.CreateParameter( 'i',ftInteger,pdInput,4,10 );
        Parameters.CreateParameter( 'j',ftString,pdOutPut,100,'' );
        ExecProc;
        showmessage( Parameters.ParamValues['j'] );
      end;
      

  2.   

    在执行的过程中,当到了storedproc1.Params[0].Value:=1;这行时,就报错提示:index   out   of   bound(0);因为你未创建参数0,所以要用Parameters.CreateParameter();创建参数对象后再赋值。 
      

  3.   

    谢谢大家,问题解决了,原来是StoredProc1.open;的问题,改成execproc后就通过了。