我在oracle数据库中有一个函数。我需要从delphi中调用它。我使用下面的代码:如何将类型DATE的参数传递给函数
procedure TForm1.Run;
var
q:TADOQuery;
begin
q:=TADOQuery.Create(nil);
q.Connection:=ADOConnection1;
q.ParamCheck:=false;
q.SQL.Add('BEGIN');
q.SQL.Add(' :RES:=Search(:P_DATE);');
q.SQL.Add('END;');
q.Parameters.AddParameter.Name:='P_DATE';
q.Parameters.ParamByName('P_DATE').Direction:=pdInput;
q.Parameters.ParamByName('P_DATE').DataType:=ftDate;
q.Parameters.ParamByName('P_DATE').Value:=Now;
q.Parameters.AddParameter.Name:='RES';
q.Parameters.ParamByName('RES').DataType:=ftFloat;
q.Parameters.ParamByName('RES').Direction:=pdOutput;
q.Parameters.ParamByName('RES').Value:=1;
q.ExecSQL;
//...
我得到ora-06550
错误,说invalid number or type of parameters
。如果我将P_DATE
参数更改为sysdate
,即:RES:=Search(sysdate);
,则它工作正常。
那么我怎样才能通过类型DATE
的“in”参数从delphi的oracle函数?
Found ORA-06550 when Oracle stored function is called.。但是这涉及到Kylix Pascal IDE。我预计会遇到与delphi相同的行为吗?没有尝试使用oracle过程而不是函数。也许这个问题是可以解决的一些怎么回事...
当我使用这个我得到ora-01840,说_input值不够日期格式_我做错了什么? – horgh
此外,它不会将函数结果代码传递给RES参数 – horgh
您作为日期传递的字符串与给定的格式(在to_date中)不匹配。例如,要使用上面使用的格式掩码通过2012年12月29日,字符串必须是2012年12月29日。您使用的字符串必须短于提供的掩码。 –