遇到这样一个问题:在用Delphi怎样用存储过程调用Oracle存的函数?怎样设置存储过程的参数?返回值参数怎么设置?如能提供示例代码,万分感谢!
//附 Oracle函数定义--设置接收标记
FUNCTION SetRecMark(p_IACNo VARCHAR2,p_VerifyCode VARCHAR2) RETURN VARCHAR2 
IS
     CURSOR cursor_MDIACRecord IS
            SELECT OppNo,RecMark 
              FROM SYSMD_IACRecord 
             WHERE IACNo = p_IACNo;
     v_RI    cursor_MDIACRecord%ROWTYPE;
BEGIN
     OPEN  cursor_MDIACRecord;
     FETCH cursor_MDIACRecord INTO v_RI;    
     IF    cursor_MDIACRecord%NOTFOUND THEN 
           CLOSE cursor_MDIACRecord;
           RETURN '交互号不正确!';
     END IF;      
     CLOSE cursor_MDIACRecord;
     IF NOT iVerifyOpp(v_RI.OppNo,p_VerifyCode) THEN 
            RETURN '验证码无效!';
     END IF;     
     IF v_RI.RecMark = '!' OR TRIM(v_RI.RecMark) IS NULL THEN     
            UPDATE SYSMD_IACRecord SET      
                   RecMark  = '#',
                   RecTime  = TO_CHAR(SYSDATE,'yyyymmddhh24miss')
             WHERE IACNo = p_IACNo;
            COMMIT;
            RETURN NULL; 
     ELSE
            RETURN '已经设置过接收标记!';
     END IF;   
EXCEPTION WHEN OTHERS THEN
     ROLLBACK;
     RETURN '设置接收标记时异常:'|| CHR(13)||CHR(10) || '错误号:' || SQLCODE ||CHR(13)||CHR(10)|| '错误信息:'||SQLERRM;                                        
END; 

解决方案 »

  1.   

    select SetRecMark(p_IACNo,p_VerifyCode ) from dual;这样使用就可以了
      

  2.   

    //仅供参考
    //  mylstlot:= my_ADODB.create();
    //  mylstlot.ConnectDB(DMDBstr1);
    //  setlength(procparameter,1);
    //  procparameter[0]:=account;
    //  ADOStoredProc1:       TADOStoredProc;
      ADOStoredProc1:=mylstlot.RunStoredProc('PKG_DM_CPutility.sp_get_account_group',procparameter);
    //procparameter传入参数数组
    {function my_ADODB.RunStoredProc(ProcName:string;ProcPara:array of string) :TADOStoredProc;
    var
    ADOStoredProc1: TADOStoredProc;
    i:integer;
    begin
      ADOStoredProc1:=TADOStoredProc.Create(nil);
      ADOStoredProc1.Create(nil);
      with ADOStoredProc1 do
          begin
            Connection := ADOConnection1;
            Parameters.Clear;
            ProcedureName:= ProcName;
            for i:= 0 to length(ProcPara)-1 do
            begin
              Parameters.CreateParameter(ProcPara[i],ftstring ,pdInput,1000,ProcPara[i]);
            end;
            Open;
          end;
      result:=ADOStoredProc1;
    end;}