回答:
次の2つのオプションがあります。
例外を番号で直接参照します。
BEGIN
EXECUTE IMMEDIATE 'CREATE SEQUENCE S_TEST START WITH 1 INCREMENT BY 1';
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE = -955 THEN
NULL; -- suppresses ORA-00955 exception
ELSE
RAISE;
END IF;
END;
他のオプションは、EXCEPTION_INIT
Pragmaディレクティブを使用して、既知のOracleエラー番号をユーザー定義の例外にバインドすることです。
DECLARE
name_in_use exception; --declare a user defined exception
pragma exception_init( name_in_use, -955 ); --bind the error code to the above
BEGIN
EXECUTE IMMEDIATE 'CREATE SEQUENCE S_TEST START WITH 1 INCREMENT BY 1';
EXCEPTION
when name_in_use then
null; --suppress ORA-00955 exception
END;
ところで、エラーコードを提供するだけでエラーをキャッチする構文はありますか?
はい、最初の例で説明しました
これに関するバリエーションの詳細:
sqlcode
が955でない場合は、WHEN OTHERSにレイズを追加してください=)
Sathyaがすでに提案したものと似ていますが、when others
可能な限り完全に回避したいです-未処理の例外は、通常、特に処理していない例外の正しい結果です。
create sequence foo;
/*
sequence FOO created.
*/
declare
name_is_already_used_955 exception;
pragma exception_init(name_is_already_used_955,-955);
begin
execute immediate 'create sequence foo';
exception when name_is_already_used_955 then null;
end;
/
/*
anonymous block completed
*/