ORA-24338: 未執行語句句柄
這個問題主要出現在使用數據庫遊標的時候.當執行存儲過程,返回的遊標沒有打開時,可能會報這個錯。
遊標沒有打開的情況一般是忘記了寫打開遊標的語句,也可能是存儲過程中執行出錯,導致最後遊標未打開。
如:
CREATE OR REPLACE package BODY PK_PROFU_GetMtStopTimesInfo
is procedure GetMtStopTimesInfo
(
mMtName varchar2,
mycs out mytype
)
as
v_count int:=0;
begin
select count(1) INTO v_count
FROM WPStopTimesInfo t,MachineTools s
WHERE s.matolname=mMtName AND t.mtid=s.matolid;
if(v_count>0) then
open mycs for select w.matolname , v.stoptimes
FROM WPStopTimesInfo v,MachineTools w
WHERE w.matolname=mMtName AND v.mtid=w.matolid
order by v.stoptimes desc ;
end if;
END;
end;
當上面的變量 v_count=0 時,將出現上述錯誤.
將其修改成如下所示,問題解決.
CREATE OR REPLACE package BODY PK_PROFU_GetMtStopTimesInfo
is procedure GetMtStopTimesInfo
(
mMtName varchar2,
mycs out mytype
)
as
v_count int:=0;
begin
select count(1) INTO v_count
FROM WPStopTimesInfo t,MachineTools s
WHERE s.matolname=mMtName AND t.mtid=s.matolid;
if(v_count>0) then
open mycs for select w.matolname , v.stoptimes
FROM WPStopTimesInfo v,MachineTools w
WHERE w.matolname=mMtName AND v.mtid=w.matolid
order by v.stoptimes desc ;
else
open mycs for select mMtName as matolname,1 as stoptimes from dual;
end if;
END;
end;