Zamanın% 99'unun, en azından onları bir yerde oturum açmaksızın istisnaları sessizce görmezden gelmek için kötü bir uygulama olduğunu kabul etmeme rağmen, bunun kesinlikle kabul edilebilir olduğu özel durumlar vardır.
1) Kişisel kodu bazen başarısız olur biliyor deyimi ve seni içerir: görmezden istisnalar arzu edilebilir
[...]
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
İki tipik durumlar şunlardır: Bu durumlarda
, BOŞ senin arkadaşın Bu gerçeğin program akışını kesmesini istemiyorum. Aşağıdaki örnekte gösterildiği gibi bu durumda , sen iç içe bir blokta size deyimi içine olmalıdır:
CREATE OR REPLACE PROCEDURE MY_PROCEDURE()
IS
l_empoyee_name EMPLOYEES.EMPLOYEE_NAME%TYPE;
BEGIN
-- Catch potential NO_DATA_FOUND exception and continue
BEGIN
SELECT EMPLOYEE_NAME
INTO l_empoyee_name
FROM EMPLOYEES
WHERE EMPLOYEE_ID = 12345;
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
WHEN OTHERS THEN
RAISE;
END;
do_stuff();
EXCEPTION
WHEN OTHERS THEN
-- Propagate exception
RAISE;
END;
PL/SQL genellikle On Error Resume Görsel bilinen istisna işleme Sonraki tip izin vermez Not olduğunu Tüm istisnaların dikkate alınmadığı ve programın hiçbir şey olmamış gibi çalışmaya devam ettiği temel (bkz. On error resume next type of error handling in PL/SQL oracle). Yuvalanmış bir blokta potansiyel olarak başarısız olan ifadeleri açıkça eklemeniz gerekir. 2) Prosedürünüz o kadar önemli değildir ki, attığı tüm özel durumları göz ardı etmek, ana program mantığınızı etkilemeyecektir. (Ancak, bu çok nadiren böyledir ve genellikle uzun vadede bir ayıklama kabus neden olabilir)
BEGIN
do_stuff();
EXCEPTION
WHEN OTHERS THEN
-- Ignore all exceptions and return control to calling block
NULL;
END;
Belki de "başkaları null" olduğunda, bir adımın işe yarayıp yaramadığını gerçekten umursamadığınız çok özel bloklar dışında ve "başkaları arttığında" sadece hata hakkında bilgi atarsa, kötü uygulama olarak nitelendirilmeye değer. . –