【问题标题】:How can I call an Oracle function from Delphi?如何从 Delphi 调用 Oracle 函数?
【发布时间】:2011-02-26 15:10:48
【问题描述】:

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

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

我收到了关于 sql plus 的回复(非常感谢),但我需要知道如何在 Delphi 中执行此操作

【问题讨论】:

  • 欢迎来到stackoverflow!您可以通过将答案标记为正确来向回答问题的人表示感谢。点击答案旁边的绿色勾号。恐怕我无法帮助您解决这个问题 - 我对德尔福一无所知。 :)

标签: oracle delphi function


【解决方案1】:

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

例子:

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;

【讨论】:

  • Oracle 有 DUAL 特殊表,当您需要这样的东西时可以使用。您的代码可能无法执行您所期望的 - 它可以为 的每一行调用函数
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多