use*_*630 3 delphi oracle delphi-7 odac
我正在使用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;
Run Code Online (Sandbox Code Playgroud)
架构是
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;
Run Code Online (Sandbox Code Playgroud)
当我正在编译包时,我没有得到任何错误.我怎么运行应用程序我得到一个错误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;
Run Code Online (Sandbox Code Playgroud)
其实我不想要其他条件.有没有办法摆脱错误.
在我看来,问题是:在存储过程的第一个版本中,可能没有返回结果集,但在第二个版本中,您在最后一个中提供了结果集.
当我们通过查看完整的错误报告了解ORA-24338的含义时,我的怀疑甚至更强烈:
Error: ORA-24338
Text: statement handle not executed
---------------------------------------------------------------------------
Cause: A fetch was attempted before executing a statement handle.
Action: Execute a statement and then fetch the data.
Run Code Online (Sandbox Code Playgroud)
尝试获取,但在某些情况下,没有任何结果集被提取,直到你提供了最后一个.
存储过程通过输出参数返回游标,因此您始终必须打开该游标.在代码的第一个版本中,您没有.
| 归档时间: |
|
| 查看次数: |
55518 次 |
| 最近记录: |