如何从 Delphi 调用 Oracle 函数?

发布于 2024-10-19 06:14:56 字数 161 浏览 3 评论 0原文

我在 Oracle 中创建了一个函数,该函数将记录插入特定表中,并根据函数内发生的情况返回输出。例如(ins_rec 返回号)

我如何调用这个函数并在Delphi 中查看它的输出?

我收到了 sql plus 的回复(非常感谢),但我需要知道如何在 Delphi 中做到这一点

I created a function in Oracle that inserts records in specific tables and return an output according to what occurs within the function. e.g (ins_rec return number)

How do I call this function and see its output in Delphi?

I got a reply (with all my thanks) for sql plus but I need to know how can I do this in Delphi

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

痞味浪人 2024-10-26 06:14:56

只需将用户定义的函数作为查询中的列名称传递即可,它将起作用。

例子:

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;

Just pass the user defined function as column name in the query and it will work.

Example:

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;
殊姿 2024-10-26 06:14:56

如何实现它可能取决于您使用的数据库访问库(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 单元。

How to accomplish it may depend on what DB access library you use (BDE? dbExpress? ADO? others), some may offer a "stored procedure" component that may work with functions as well.

A general approach it to use an anonymous PL/SQL block to call the function (and a parameter to read the return value), PL/SQL resembles Pascal a lot...:

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;

I would not have used a function, though, but a stored procedure with an OUT value. Moreover, Oracle offers packages that are a very nice way to organize procedure and functions, and they also offer useful features like session variables and initialization/finalization sections... very much alike a Delphi unit.

荆棘i 2024-10-26 06:14:56

我们使用此利用 BDE 的代码运行 Oracle 存储过程(我知道请不要 bash,因为我们使用了 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

we run an Oracle stored procedure using this code that utilizes the BDE (I know please don't bash because we used the 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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文