通过ODAC调用Oracle存储过程(不带出参),开始我用ORAQuery,oqry.sql.text:='exec mypro(''a'',''b'',''c'')',一运行总是报错(这个语句在SQL/Plus可以正确执行),需要做什么调整?
后来我用ORAStoredProc,
oproMain.StoredProcName:=myProParmRec.ProName;
oproMain.Params.Clear;
oproMain.ParamCheck:=false; oproMain.params.CreateParam(ftString,'vBizType',ptInput );
oproMain.params.CreateParam(ftString,'vBeginDate',ptInput );
oproMain.params.CreateParam(ftString,'vEndDate',ptInput );
oproMain.ParamByName('vBizType').Value:=myProParmRec.parm[0];
oproMain.ParamByName('vBeginDate').Value:=myProParmRec.parm[1];
oproMain.ParamByName('vEndDate').Value:=myProParmRec.parm[2];
oproMain.ExecProc;
没有报错,但是似乎没有执行那个存储过程,这是什么原因啊?
这个存储过程是用一个表里面插一些数据,存储过程本身应该没问题,经过测试可用的。
兄弟们,帮帮忙吧,问题解决马上结贴!
后来我用ORAStoredProc,
oproMain.StoredProcName:=myProParmRec.ProName;
oproMain.Params.Clear;
oproMain.ParamCheck:=false; oproMain.params.CreateParam(ftString,'vBizType',ptInput );
oproMain.params.CreateParam(ftString,'vBeginDate',ptInput );
oproMain.params.CreateParam(ftString,'vEndDate',ptInput );
oproMain.ParamByName('vBizType').Value:=myProParmRec.parm[0];
oproMain.ParamByName('vBeginDate').Value:=myProParmRec.parm[1];
oproMain.ParamByName('vEndDate').Value:=myProParmRec.parm[2];
oproMain.ExecProc;
没有报错,但是似乎没有执行那个存储过程,这是什么原因啊?
这个存储过程是用一个表里面插一些数据,存储过程本身应该没问题,经过测试可用的。
兄弟们,帮帮忙吧,问题解决马上结贴!
oqry.sql.text:='begin exec mypro(''a'',''b'',''c''); end;'
记得以前是这样用的
oqry.sql.text:='begin mypro(''a'',''b'',''c''); end;'
begin
ParamByName('vBizType').AsString := myProParmRec.parm[0];
ParamByName('vBeginDate').AsString := myProParmRec.parm[1];
ParamByName('vEndDate').AsString := myProParmRec.parm[2];
ExecProc;
end;必定可以,别忘了添加存储过程名和OraSession
FetchAll 改为True;
with OraStoredProc do
begin
AutoCommit := False;
FetchAll := True;
Session := MyOraSession;
StoredProcName := 'CardOut'; params.Clear;
params.CreateParam(ftstring,'vBizType',ptinput);
params.CreateParam(ftstring,'vBeginDate',ptinput);
params.CreateParam(ftstring,'vEndDate',ptinput);
prepare;
end;//执行
with OraStoredProc do
begin
ParamByName('vBizType').AsString := myProParmRec.parm[0];
ParamByName('vBeginDate').AsString := myProParmRec.parm[1];
ParamByName('vEndDate').AsString := myProParmRec.parm[2];
ExecProc;
end;