如何从Delphi调用Oracle函数?

时间:2011-02-26 15:10:48

标签: oracle delphi function

我在Oracle中创建了一个函数,它在特定的表中插入记录,并根据函数中的内容返回输出。例如(ins_rec返回号码)

如何调用此函数并在Delphi中查看其输出?

我得到了sql plus的回复(谢谢)但是我需要知道如何在Delphi中做到这一点

3 个答案:

答案 0 :(得分:6)

只需将用户定义的函数作为列名传递给查询,它就可以工作。

示例:

Var
  RetValue: Integer;
begin
  Query1.Clear;
  Query1.Sql.Text := 'Select MyFunction(Param1) FunRetValue from dual';
  Query1.Open;

  if not Query1.Eof then
  begin
    RetValue := Query1.FieldByName('FunRetValue').AsInteger;
  end;
end;

答案 1 :(得分:5)

如何实现它可能取决于你使用的是什么数据库访问库(BDE?dbExpress?ADO?其他),有些可能提供"存储过程"也可以使用函数的组件。

使用匿名PL / SQL块来调用函数(以及读取返回值的参数)的一般方法,PL / SQL类似于Pascal ...:

Qry.SQL.Clear;
Qry.SQL.Add('BEGIN');
Qry.SQL.Add('  :Rez := ins_rec;');
Qry.SQL.Add('END;');
// Set the parameter type here...
...
Qry.ExecSQL;
...
ReturnValue :=  Qry.ParamByName('Rez').Value;

但我不会使用函数,而是使用OUT值的存储过程。此外,Oracle提供了,它们是组织过程和函数的一种非常好的方法,它们还提供了有用的功能,如会话变量和初始化/完成部分......非常类似于Delphi单元。

答案 2 :(得分:0)

我们使用这个使用BDE的代码运行Oracle存储过程(我知道请不要因为我们使用了BDE而抨击!)

Try
  DMod.Database1.Connected:= False;
  DMod.Database1.Connected:= True;
  with DMod.StoredProc1 do
  begin
    Active:= False;

    ParamByName('V_CASE_IN').AsString:= Trim(strCaseNum);
    ParamByName('V_WARRANT_IN').AsString:= strWarrantNum;
    ParamByName('V_METRO_COMMENTS').AsString:= strComment;

    Prepare;
    ExecProc;

    Result:= ParamByName('Result').AsString;
  end;
Except