ORACLE: как вызвать хранимую процедуру с обоими параметрами входа и выхода - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть StoredProcedure в Oracle с параметром 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 - допустимое соединение с базой данных.

Согласно этой веб-странице нет необходимости определять параметр для курсора (AAccessObjects), но оракул думает иначе.

Короче говоря, как мне вызвать мой SP из Delphi с помощью ADO

ОБНОВЛЕНИЕ

Я попытался предоставить curser ad параметр:

  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 голосов
/ 11 декабря 2018

Попробуйте это:

ParamType := ptOutput

Не уверен, каким будет тип данных для CURSOR_TYPE в Oracle.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...