Oracle: вызов SP с параметром IN AND Out - PullRequest
0 голосов
/ 10 декабря 2018

Прежде всего мои знания об Oracle очень ограничены.

Я унаследовал большой проект Delphi с использованием Oracle, он был обновлен до 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 лет, поэтому в базе данных должно быть некоторое различие!Либо из-за обновления, либо из-за.

Короче говоря: Справка требовала вызова GetAccessObjects2 из заданного кода Delphi.

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