通过ODAC调用Oracle存储过程(不带出参),开始我用ORAQuery,oqry.sql.text:='exec mypro(''a'',''b'',''c'')',一运行总是报错(这个语句在SQL/Plus可以正确执行),需要做什么调整?
后来我用ORAStoredProc,
                oproMain.StoredProcName:=myProParmRec.ProName;
                oproMain.Params.Clear;
                oproMain.ParamCheck:=false;                oproMain.params.CreateParam(ftString,'vBizType',ptInput );
                oproMain.params.CreateParam(ftString,'vBeginDate',ptInput );
                oproMain.params.CreateParam(ftString,'vEndDate',ptInput );
                
                oproMain.ParamByName('vBizType').Value:=myProParmRec.parm[0];
                oproMain.ParamByName('vBeginDate').Value:=myProParmRec.parm[1];
                oproMain.ParamByName('vEndDate').Value:=myProParmRec.parm[2];
                oproMain.ExecProc;
没有报错,但是似乎没有执行那个存储过程,这是什么原因啊?
这个存储过程是用一个表里面插一些数据,存储过程本身应该没问题,经过测试可用的。
兄弟们,帮帮忙吧,问题解决马上结贴!

解决方案 »

  1.   

    myProParmRec是我定义的一个Record,参数的值都取到了,我调试可以看到,但似乎就是不执行这个存储过程。
      

  2.   

    这样试试
    oqry.sql.text:='begin exec mypro(''a'',''b'',''c''); end;'
    记得以前是这样用的
      

  3.   

    应该是这样,肯定可以
    oqry.sql.text:='begin  mypro(''a'',''b'',''c''); end;'
      

  4.   

    如果是TORAStoredProc,则    with OraStoredProc do
        begin
          ParamByName('vBizType').AsString := myProParmRec.parm[0];
          ParamByName('vBeginDate').AsString := myProParmRec.parm[1];
          ParamByName('vEndDate').AsString := myProParmRec.parm[2];
          ExecProc;
        end;必定可以,别忘了添加存储过程名和OraSession
      

  5.   

    另外,不管使用TOraQuery还是TOraStoredProc都要把下列参数改掉AutoCommit 改为false;
    FetchAll 改为True;
      

  6.   

    刚才漏东西了,完整如下://预处理
       with OraStoredProc do
       begin
         AutoCommit := False;
         FetchAll := True;
         Session := MyOraSession;
         StoredProcName := 'CardOut';     params.Clear;
         params.CreateParam(ftstring,'vBizType',ptinput);
         params.CreateParam(ftstring,'vBeginDate',ptinput);
         params.CreateParam(ftstring,'vEndDate',ptinput);
         prepare;
       end;//执行
        with OraStoredProc do
        begin
          ParamByName('vBizType').AsString := myProParmRec.parm[0];
          ParamByName('vBeginDate').AsString := myProParmRec.parm[1];
          ParamByName('vEndDate').AsString := myProParmRec.parm[2];
          ExecProc;
        end;