我在Oracle中创建了一个函数,它在特定的表中插入记录,并根据函数中的内容返回输出。例如(ins_rec返回号码)
如何调用此函数并在Delphi中查看其输出?
我得到了sql plus的回复(谢谢)但是我需要知道如何在Delphi中做到这一点
答案 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