Oracle中的FireDac调用函数

Oracle中的FireDac调用函数,oracle,delphi,firedac,Oracle,Delphi,Firedac,我的代码: FDStoredProc1.StoredProcName := 'aaaaa' ; with FDStoredProc1.Params do begin Clear; with Add do begin ParamType := ptInput; DataType := ftInteger; end; end; FDStoredProc1.Params[0].Value := StrToint(edit1.Text) ; edit1.Text := F

我的代码:

FDStoredProc1.StoredProcName := 'aaaaa' ;
with FDStoredProc1.Params do begin
  Clear;
  with Add do begin
    ParamType := ptInput;
    DataType := ftInteger;
  end;
end;  
FDStoredProc1.Params[0].Value := StrToint(edit1.Text) ;
edit1.Text := FDStoredProc1.ExecFunc() ;
我在Oracle中的代码:

create or replace FUNCTION AAAAA (pn number) RETURN VARCHAR2 AS 
BEGIN
  update dmnv set thuong = pn  ; 
  commit  ; 
  RETURN '3' 
END AAAAA;

运行时没有错误,但Oracle Server(版本12)上的参数为
NULL
。因此,服务器上的函数是
exec
,参数错误(真正的参数是edit1.text中的值)。我在edit1中键入了一个数字。

给参数一个名称

  with Add do begin
    Name := 'pn';
    ParamType := ptInput;
    DataType := ftInteger;
  end;

给参数一个名称

  with Add do begin
    Name := 'pn';
    ParamType := ptInput;
    DataType := ftInteger;
  end;
另获取错误。应为INTO子句


另获取错误。需要INTO子句

将“aaaaa”更改为“aaaaa”,然后重试。Oracle数据库中的所有标识符默认为大写。祝你好运。不带引号的标识符不区分大小写,并且被视为大写。所以这并不重要,除非firedac会在存储的进程名周围隐式添加引号,这会很奇怪。请将“aaaaa”更改为“aaaaa”,然后重试。Oracle数据库中的所有标识符默认为大写。祝你好运。不带引号的标识符不区分大小写,并且被视为大写。所以这并不重要,除非firedac会在存储的进程名称周围隐式添加引号,这会很奇怪。[firedac][Phys][Ora]-338.Param[pn]类型从[ftMTBcd]更改为[ftInteger].Query必须重新准备。可能的原因对TFDparam.AsXXX属性的分配已显式更改参数数据类型。提示:使用TFDparam.Value或适当的TFDparam.AsXXX属性。[FireDac][Phys][Ora]-338.Param[pn]类型已从[ftMTBcd]更改为[ftInteger].Query必须重新准备。可能的原因对TFDparam.AsXXX属性的分配已明显更改参数数据类型。提示:使用TFDparam.Value或适当的TFDparam.AsXXX属性。