ORACLE:如何同时使用输入和输出参数调用存储过程

时间:2018-12-11 14:46:53

标签: oracle delphi

我在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中得到一个异常:

  

参数对象定义不正确

1 个答案:

答案 0 :(得分:-3)

尝试一下:

ParamType := ptOutput

不确定Oracle中CURSOR_TYPE的数据类型是什么。