Delphi XE3, Oracle 11.2.0.4
Есть процедура.
Code: Select all
CREATE OR REPLACE FUNCTION TEST.GetSeven (a integer default 7)
RETURN INTEGER
IS
BEGIN
RETURN a;
END;
Делфи код
Code: Select all
function ExecOraProc (procName:String; Param:variant):variant;
var
Proc:TOraStoredProc;
j:Integer;
parCnt:Integer;
begin
if Param<>null then parcnt:=1 else parcnt:=0;
Proc:=TOraStoredProc.Create(nil);
Proc.Options.DefaultValues:=True;
try
Proc.StoredProcName:=procname;
Proc.Prepare;
j:=0;
if (Proc.ParamCount>0) and (Proc.Params[0].name='RESULT') then j:=1;
if Proc.ParamCount>=parcnt+j then
while Proc.ParamCount>parcnt+j do Proc.Params.Delete(parcnt+j);
if (Proc.ParamCount>j) and (param<>null)
then Proc.Params[j].Value:=Param;
Proc.ExecProc;
if Proc.Params.FindParam('Result')<>nil
then result:=Proc.ParamByName('Result').value
else result:=varNull;
finally
Proc.Free;
end;
end;
procedure TMainForm.Button1Click(Sender: TObject);
begin
ShowMessage(IntToStr(ExecOraProc('Test.GetSeven', null)));
end;