下面是一些實際的代碼我試圖調試:如果設置爲空,FETCH INTO不會引發異常,是嗎?
BEGIN
OPEN bservice (coservice.prod_id);
FETCH bservice
INTO v_billing_alias_id, v_billing_service_uom_id, v_summary_remarks;
CLOSE bservice;
v_service_found := 1;
-- An empty fetch is expected for some services.
EXCEPTION
WHEN OTHERS THEN
v_service_found := 0;
END;
當參數化光標bservice(PROD_ID)是空的,它取空到三個變量,並且不拋出異常。
因此,編寫此代碼期望它拋出異常的人是錯誤的,對吧?評論似乎意味着和預計空取回,然後它爲稍後處理設置一個標誌,但我認爲這個代碼不可能已經用空集測試過。
顯然,它應該使用bservice%NOTFOUND或bservice%FOUND或類似的。
Nyffenegger對,它基本上就像SQL Server一樣工作。我認爲FETCH不覆蓋變量就是爲什麼沒有檢測到這個錯誤。不知道爲什麼光標首先被使用,因爲你可以選擇變量,或者直接進入更新... – 2011-02-03 15:12:16