如何从 Delphi 调用 Oracle 函数?
Posted
技术标签:
【中文标题】如何从 Delphi 调用 Oracle 函数?【英文标题】:How can I call an Oracle function from Delphi? 【发布时间】:2011-02-26 15:10:48 【问题描述】:我在 Oracle 中创建了一个函数,用于在特定表中插入记录并根据函数内发生的情况返回输出。例如(ins_rec 返回编号)
如何调用此函数并在 Delphi 中查看其输出?
我收到了关于 sql plus 的回复(非常感谢),但我需要知道如何在 Delphi 中执行此操作
【问题讨论】:
欢迎来到***!您可以通过将答案标记为正确来向回答问题的人表示感谢。点击答案旁边的绿色勾号。恐怕我无法帮助您解决这个问题 - 我对德尔福一无所知。 :) 【参考方案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 特殊表,当您需要这样的东西时可以使用。您的代码可能无法执行您所期望的 - 它可以为如何实现它可能取决于您使用的 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
【讨论】:
以上是关于如何从 Delphi 调用 Oracle 函数?的主要内容,如果未能解决你的问题,请参考以下文章
delphi 三层架构如何调用oracle 存储过程,应该使用哪个部件,最好有实例