我在Oracle中有一个StoredProcedure,带有一个In参数和一个参数(游标)
该过程定义如下:
PROCEDURE GetAccessObjects2(ALotteryID IN VARCHAR2, AAccessObjects OUT CURSOR_TYPE) AS
BEGIN
OPEN AAccessObjects FOR
SELECT AccessObjectID, AccessObjectName
FROM AccessObjects;
END;
然后我尝试从Delphi中调用它:
procedure TForm7.Button1Click(Sender: TObject);
begin
with ADOStoredProc1 do
begin
Connection := ADOConnection1;
CursorType := ctOpenForwardOnly;
MaxRecords := 5000;
ProcedureName := 'DDK.GetAccessObjects2';
with Parameters.AddParameter do
begin
Name := 'ALotteryID';
DataType := ftString;
Value := 'TEST';
end;
end;
ADOStoredProc1.Open;
end;
但是后来我有了一个例外:
ORA-06550:第1行,第7列:PLS-00306:错误的数量或类型 调用'GETACCESSOBJECTS2'的参数ORA-06550:第1行,第7列: PL / SQL:语句被忽略
PS:ADOConnection1
是与数据库的有效连接。
根据this web page,没有必要为游标定义参数(AAccessObjects),但是oracle认为不是这样。
因此,简而言之,我该如何使用ADO从Delphi调用我的SP
更新
我尝试为curser广告提供参数:
with ADOStoredProc1 do
begin
Connection := ADOConnection1;
CursorType := ctOpenForwardOnly;
MaxRecords := 5000;
ProcedureName := 'DDK.GetAccessObjects2';
Parameters.CreateParameter('ALotteryID', ftString, pdInput, 255, 'TEST');
Parameters.CreateParameter('AAccessObjects', ftCursor, pdOutput, 0, null);
end;
ADOStoredProc1.Open;
但是随后我在ADO中得到一个异常:
参数对象定义不正确
答案 0 :(得分:-3)
尝试一下:
ParamType := ptOutput
不确定Oracle中CURSOR_TYPE的数据类型是什么。