Здравствуйте.
Трудно сказать. А показать саму stored procedure, или хотя бы определение параметров можете?
Все могу :-).. Причем, через Parameters.refresh и т.д. работает (если она не в пакете), но.... CreateParameter... не работает даже если не в пакете...
Функция такая:
FUNCTION func1 (aParamName IN tcstandardparam.paramname%TYPE)
RETURN tcstandardparam.paramvalue%TYPE
IS
lParamValue tcstandardparam.paramvalue%TYPE;
BEGIN
SELECT PARAMValue
into lParamValue
FROM tcstandardparam sp
WHERE sp.paramname = UPPER(aParamName);
RETURN lParamValue;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
RAISE_APPLICATION_ERROR(-20008, 'Стандартного парметра с именем ' ||
aParamName || ' в таблице нет!!!' );
END;
Вызывать пыталась следующим образом:
вариант 1
Function F1(aParam: string): OleVariant;
var
RecSet, Prm, Cmd: OleVariant;
begin
Cmd := ADO.CreateCommand;
Cmd.ActiveConnection := ...
Cmd.CommandText := 'declare res varchar2(2000); begin res := Func1(aParam); end;';
Prm := aCmd.CreateParameter('aParam', adVarChar, adParamInput, 2000);
Prm.Value := aParam;
Cmd.Parameters.Append(Prm);
RecSet := Cmd.Execute;
.....
end;
вариант 2
Function F1(aParam: string): OleVariant;
var
RecSet, Prm, Cmd: OleVariant;
begin
Cmd := ADO.CreateCommand;
Cmd.ActiveConnection := ...
Cmd.CommandText := 'declare res varchar2(2000); begin res := Func1(' + '''' + aParam+ '''' + '); end;';
Prm := aCmd.CreateParameter('res', adVarChar, adParamOutPut, 2000);
Cmd.Parameters.Append(Prm);
RecSet := Cmd.Execute;
.....
end;
вариант 3
Function F1(aParam: string): OleVariant;
var
AConnection, RecSet, Prm, Cmd: OleVariant;
begin
AConnection := ADO.CreateADOConnection;
AConnection .ConnectionString := ...
AConnection.LoginPrompt = false;
AConnection.Open();
RecSet = AConnection.Execute_(declare res varchar2(2000); begin res := Func1(' + '''' + aParam+ '''' + '); end;);
.....
end;
Результат один: ADODB.Recordset Операция не допускается, если объект закрыт.