首先,我对Oracle的了解非常有限。
我已经使用Oracle继承了一个大型Delphi项目,该项目已升级到Oracle 11g。现在,我在使用IN
和OUT
:参数调用存储过程时遇到了一些问题
让我们以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。