Oracle:使用IN AND Out参数调用SP

时间:2018-12-10 13:11:31

标签: oracle delphi

首先,我对Oracle的了解非常有限。

我已经使用Oracle继承了一个大型Delphi项目,该项目已升级到Oracle 11g。现在,我在使用INOUT:参数调用存储过程时遇到了一些问题

让我们以SP开头(放在包装中)

PROCEDURE GetAccessObjects(AAccessObjects OUT CURSOR_TYPE);

CURSOR_TYPE

的定义
TYPE  CURSOR_TYPE IS REF CURSOR;

然后输入Delphi代码:

procedure TDBApi.GetAccessObjects(var ResultSet: TADOStoredProc);
var
  SP: TDbStoredProc;
begin
  SP := CreateStoredProc(SQLPackage + 'GetAccessObjects');
  try
    SP.MaxRecords := mrAll;
    SP.Open;
    ResultSet := SP;
  except
    SP.Free;
    raise;
  end;
end;

执行Delphi代码时,效果很好!

然后,我创建了一个GetAccessObjects2,并向该接口添加了IN参数:

PROCEDURE GetAccessObjects2(ALotteryID IN INT, AAccessObjects OUT CURSOR_TYPE);

ALotteryID并没有用于SP内的任何东西,只是一个伪参数!

然后我从Delphi调用它:

procedure TDBApi.GetAccessObjects2(var ResultSet: TADOStoredProc);
var
  SP: TDbStoredProc;
begin
  SP := CreateStoredProc(SQLPackage + 'GetAccessObjects2');

  try
    ParamAdd(SP.Parameters, 'ALOTTERYID', 1, ftInteger, pdInput, -1);

    SP.MaxRecords := mrAll;
    SP.Open;
    ResultSet := SP;
  except
    SP.Free;
    raise;
  end;
end;

我得到一个错误:

ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'GETACCESSOBJECTS2'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

Delphi代码已经运行了大约10年,因此它在数据库中一定与众不同!要么是由于升级,要么是由于。

简而言之:帮助需要从给定的Delphi代码中调用GetAccessObjects2。

0 个答案:

没有答案