例外をキャッチしたくない場合は、例外ブロックを削除してください。
CREATE OR REPLACE PROCEDURE myproc(p_id NUMBER, p_id2 NUMBER, p_par3 NUMBER) AS
BEGIN
DELETE FROM child_table
WHERE id1 = p_id
AND par = p_par3;
DELETE FROM parent_table WHERE no = p_id2;
COMMIT; /* do you really want to commit in a procedure? */
END myproc;
すべてを捕まえる必要はありません (例外はポケモンではありません)。キャッチして再レイズすることを本当に主張する場合は、RAISEまたはRAISE_APPLICATION_ERRORを使用できます。
EXCEPTION
WHEN OTHERS THEN
raise_application_error(-20001 /* user-defined exception number
between -20999 and -20000 */,
'your user-defined exception message',
TRUE /* this will preserve the error stack */
);
END;
子例外のみをより具体的にトラップする場合は、例外番号を定義する必要があります。これは、PL/SQL にこのエラーに対する事前定義された例外がないためです。
CREATE OR REPLACE PROCEDURE myproc(p_id NUMBER, p_id2 NUMBER, p_par3 NUMBER) AS
child_exists EXCEPTION;
PRAGMA EXCEPTION_INIT(child_exists, -2292); /* raises ORA-02292 */
BEGIN
DELETE FROM child_table
WHERE id1 = p_id
AND par = p_par3;
DELETE FROM parent_table WHERE no = p_id2;
COMMIT; /* do you really want to commit in a procedure? */
EXCEPTION
WHEN child_exists THEN
-- do something
RAISE;
END myproc;