爲什麼你會在這種情況下引發異常?你應該只在兩種情況下真的發生異常:
- 你打算捕獲異常並在調用代碼中正確處理它。
- 有些東西是錯的,你想讓你的應用程序崩潰和燒傷。
你不是在做這些事情,也不需要。你只是想停止代碼運行和「返回」(這是一個過程)你的價值。在這種情況下,我會建議使用return
。
return
結束包含它的匿名塊的執行,並在過程中將「控制」返回給調用語句。即它完美地符合法案。
在停止執行過程之前,使用return,以下代碼將sdate
指定給out
參數。 「更多的東西」永遠不會發生。
create or replace procedure my_procedure_one (returnval in out date) is
begin
-- some stuff.
if sdate > sysdate then
returnval := sdate;
-- we don-t want to continue any more if this is true.
return;
end if;
-- more stuff.
end;
如果你只是想分配給sdate
如果returnval
的條件是不真,那麼你只需換輪這兩條線;也許可以將它從if語句中刪除,以使其更加明顯。這就是你的代碼目前所做的,因爲當你提升exec_not_allowed
時,所有執行都停止了。
create or replace procedure my_procedure_two (returnval in out date) is
begin
-- some stuff.
-- we don-t want to continue any more if this is true.
if sdate > sysdate then
return;
end if;
returnval := sdate;
-- more stuff.
end;
無論哪種情況,您的Java調用都保持不變。在第一個程序(my_procedure_one
)中,您將獲得sdate
個返回,並在第二個過程中返回null,假定returnval
以前未被分配。
來源
2012-06-07 16:55:03
Ben
是不是'returnval:= sdate'在任何情況下都無法訪問? – beerbajay
@beerbajay我在編譯和運行過程時沒有遇到任何此類錯誤。 – user75ponic