Прежде всего мои знания об 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.