【发布时间】:2012-08-16 16:38:53
【问题描述】:
我正在使用 Delphi 7、Oracle 10 和 ODAC 组件。
我从 LoadTrainResult 方法调用了一个 storedProc。
procedure TfrmTrain.LoadTrainResult;
begin
StoredProc.StoredProcName := 'PTRAIN.QTRAIN';
StoredProc.Prepare;
try
StoredProc.ParamByName('P_COURSE').AsString := CurrentSearch.Course;
StoredProc.ParamByName('P_TOPIC').AsString := CurrentSearch.Topic;
StoredProc.ParamByName('P_EMP').AsString := CurrentSearch.Emp;
StoredProc.Open;
finally
StoredProc.Close;
end;
end;
架构是
Create or replace PACKAGE TRAIN.pTRAIN IS
TYPE CursorType IS REF CURSOR;
PROCEDURE QTRAIN (p_CursorVar OUT CursorType, p_Course in VarChar2,
p_Topic in out VarChar2, p_emp in Varchar 2 );
END TRAIN.pTRAIN;
create or replace PACKAGE BODY TRAIN.pTRAIN IS
PROCEDURE QTRAIN (p_CursorVar OUT CursorType, p_Course in VarChar2,
p_Topic in out VarChar2, p_emp in Varchar 2 )
IS
BEGIN
if p_course is not null then
OPEN p_cursorvar for
select * from train.course
where course = p_Course;
elsif p_topic is not null then
OPEN p_cursorvar for
select *
from train.topic
where topic = p_topic;
end if;
Exception
WHEN OTHERS THEN
p_TOPIC := '';
END QTRAIN;
END TRAIN.pTRAIN;
当我编译包时,我没有收到任何错误。 但是,当我运行应用程序时,我收到错误 ORA-24338:未执行语句句柄。我调试了我的应用程序,发现错误发生在 StoredProc.Prepare;不在 StoredProc.ExecProc;
我已经阅读了很多关于 ORA-24338 的帖子,但我无法找出我的代码有什么问题。
我发现当我将 else 条件添加到存储过程中时,我没有收到错误。
修改后的Proc是
create or replace PACKAGE BODY TRAIN.pTRAIN IS
PROCEDURE QTRAIN (p_CursorVar OUT CursorType, p_Course in VarChar2,
p_Topic in out VarChar2, p_emp in Varchar 2 )
IS
BEGIN
if p_course is not null then
OPEN p_cursorvar for
select * from train.course
where course = p_Course;
elsif p_topic is not null then
OPEN p_cursorvar for
select * from train.topic
where topic = p_topic
else
OPEN p_cursorvar for
select * from emp whhere empid = p_emp;
end if;
Exception
WHEN OTHERS THEN
p_TOPIC := '';
END QTRAIN;
END TRAIN.pTRAIN;
其实我不想要其他条件。有什么办法可以摆脱这个错误。
【问题讨论】:
-
会不会是第二个例子有
end if而第一个没有? -
您的 ODAC 组件的版本号是多少?
-
Delphi 7 的 ODAC 版本 5.00.1.4
-
您似乎只使用了一次StoredProc,那么,您为什么要费心准备它呢?只需调用 .Open ,这也可能解决问题。
-
我删除了 StoredProc.Prepare 然后我也得到了 ORA-24338 错误
标签: oracle delphi delphi-7 odac