A Error Output Method Better Than Sqlerrm

階層方エラーが起こった場合、根本的なエラーはSQLERRMで処理すると、わからなくなることがありえる。
DBMS_UTILITY.FORMAT_ERROR_STACKで処理すると安全である。

  BEGIN
    RAISE NO_DATA_FOUND;
  EXCEPTION
     WHEN OTHERS
     THEN
        DBMS_OUTPUT.put_line (DBMS_UTILITY.FORMAT_ERROR_STACK);
  END;
  /
 
ORA-01403: no data found

DBMS_UTILITY

DBMS_UTILITYサブプログラムの要約

ACTIVE_INSTANCESプロシージャ アクティブなインスタンスを戻します。
ANALYZE_DATABASEプロシージャ データベース内にあるすべての表、クラスタおよび索引を分析します。「推奨されないサブプログラム」も参照してください。
ANALYZE_PART_OBJECTプロシージャ 指定した表および索引を分析します。
ANALYZE_SCHEMAプロシージャ スキーマ内にあるすべての表、クラスタおよび索引を分析します。「推奨されないサブプログラム」も参照してください。
CANONICALIZEプロシージャ 指定した文字列を正規化します。
COMMA_TO_TABLEプロシージャ カンマで区切られた名前のリストを、名前のPL/SQL表に変換します。
COMPILE_SCHEMAプロシージャ 指定したスキーマ内にあるすべてのプロシージャ、ファンクション、パッケージおよびトリガーをコンパイルします。
CREATE_ALTER_TYPE_ERROR_TABLEプロシージャ ALTER TYPE文のEXCEPTION句で使用するエラー表を作成します。
CURRENT_INSTANCEファンクション 現在接続しているインスタンス番号を戻します。
DATA_BLOCK_ADDRESS_BLOCKファンクション データ・ブロック・アドレスのブロック番号部分を取得します。
DATA_BLOCK_ADDRESS_FILEファンクション データ・ブロック・アドレスのファイル番号部分を取得します。
DB_VERSIONプロシージャ データベースに関するバージョン情報を戻します。
EXEC_DDL_STATEMENTプロシージャ parse_stringでDDL文を実行します。
FORMAT_CALL_STACKファンクション 現行のコール・スタックをフォーマットします。
FORMAT_ERROR_BACKTRACEファンクション 現行のエラーのポイントから、エラーがキャッチされた例外ハンドラまでのバックトレースをフォーマットします。
FORMAT_ERROR_STACKファンクション 現行のエラー・スタックをフォーマットします。
GET_CPU_TIMEファンクション 現在のCPU時間を100分の1秒単位で戻します。
GET_DEPENDENCYプロシージャ 渡されたオブジェクトの依存関係を示します。
GET_HASH_VALUEファンクション 指定した文字列についてハッシュ値を計算します。
GET_PARAMETER_VALUEファンクション 指定したinit.oraパラメータの値を取得します。
GET_TIMEファンクション 現在の時間を100分の1秒単位で検出します。
INVALIDATEプロシージャ データベース・オブジェクトを無効化し、オプションでそのPL/SQLコンパイラのパラメータ設定を変更します。
IS_CLUSTER_DATABASEファンクション このデータベースがクラスタ・データベース・モードで実行しているかどうかを検出します。
MAKE_DATA_BLOCK_ADDRESSファンクション ファイル番号とブロック番号を指定して、データ・ブロック・アドレスを作成します。
NAME_RESOLVEプロシージャ 指定した名前を解決します。
NAME_TOKENIZEプロシージャ 指定した名前を解析するためにパーサーをコールします。
PORT_STRINGファンクション Oracleとオペレーティング・システムのバージョンを一意に識別する文字列を戻します。
TABLE_TO_COMMAプロシージャ 名前のPL/SQL表を、カンマで区切られた名前のリストに変換します。
VALIDATEプロシージャ 名前のPL/SQL表を、カンマで区切られた名前のリストに変換します。

Reference:
http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/appdev.102/B19245-02/d_util.htm

また、DBMS_UTILITY.FORMAT_CALL_STACK は実行のスタックを表示できる。デバッグに役に立つ。