我该如何在Delphi中调用Oracle函数?

8
我在 Oracle 中创建了一个函数,可以将记录插入特定的表,并根据函数内发生的情况返回输出。例如(ins_rec 返回数字)。
如何在 Delphi 中调用此函数并查看其输出?
我已经收到了有关 sql plus 的回复(非常感谢),但我需要知道如何在 Delphi 中执行此操作。

2
欢迎来到stackoverflow!您可以通过将答案标记为正确来向回答问题的人表示感谢。点击答案旁边的绿色勾号即可。不过很抱歉,我对Delphi一无所知。 :) - cagcowboy
3个回答

7
只需在查询中将用户定义的函数作为列名传递,它就会正常工作。
例如:
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
Oracle有一个特殊的DUAL表,可用于需要类似功能的情况。您的代码可能无法执行您所期望的操作 - 它可以为<YourTable>的每一行调用函数。 - user160694

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


0

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接