Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

$ECODE (ObjectScript)

現在のエラー・コード文字列を含みます。

Synopsis

$ECODE
$EC

概要

エラー発生時、InterSystems IRIS では、エラーに対応するエラー・コードを含む文字列 (コンマで囲まれた文字列) に $ECODE 特殊変数を設定します。例えば、未定義のグローバル変数に対する参照が作成されると、InterSystems IRIS は $ECODE 特殊変数を以下の文字列に設定します。

,M7,

$ECODE には、形式 M# (# は整数) の ISO 11756-1999 標準エラー・コードが含まれる場合があります。例えば、M6 と M7 は、それぞれ “未定義のローカル変数” および “未定義のグローバル変数” です (M7 は、グローバルおよびプロセス・プライベート・グローバルの両方に対して発行されます)。完全なリストについては、"InterSystems IRIS エラー・リファレンス" の "ISO 11756-1999 標準エラー・メッセージ" を参照してください。

また、$ECODE には、一般的なシステム・エラー・コード (ターミナル・プロンプトで $ZERROR 特殊変数に返されるエラー・コード) と同じエラー・コードが含まれる場合があります。しかし、$ECODE は、これらのエラー・コードに "Z" を追加し、山括弧を削除します。したがって、$ECODE エラーの ZSYNTAX は <SYNTAX> エラーで、ZILLEGAL VALUE は <ILLEGAL VALUE> エラー、ZFUNCTION は <FUNCTION> エラーです。$ECODE は、追加エラー情報を提供するこれらのエラー・コードの追加エラー情報を保持しません。したがって、ZPROTECT は <PROTECT> エラーとなります。追加情報コンポーネントは、$ECODE ではなくて $ZERROR に保持されます。InterSystems IRIS エラー・コードに関する詳細は、"$ZERROR" を参照してください。完全なリストは、"InterSystems IRIS エラー・リファレンス" の "一般的なシステム・エラー・メッセージ" を参照してください。

$ECODE に既に以前のエラー・コードがあるときにエラーが発生すると、既存のエラー・スタックはその新しいエラーの発生時にクリアされます。新しいエラー・スタックには現在のエラー発生時の状態を示すエントリのみが含まれるようになります (これが初期の $ECODE の動作からの変更点です。以前は、古いエラー・スタックは明示的にクリアされるまで維持されていました)。

複数のエラー・コードがある場合、InterSystems IRIS は各エラー・コードを受信した順に現在の $ECODE 値の最後に追加します。結果として得られる $ECODE 文字列の各エラーは、以下のようにコンマで区切られます。

,ZSTORE,M6,ZILLEGAL VALUE,ZPROTECT,

上の例では、最新のエラーは <PROTECT> エラーです。

他のすべてのルーチンまたはライブラリ関数を呼び出すときに $ECODE が保持されていると仮定すべきではありません。エラーが発見・処理され、$ECODE に異なる値が残される可能性があります。永続的なコピーが必要な場合は、$ETRAP コードに保存する必要があります。

また、$ECODE は明示的にクリア、あるいは設定できます。

$ECODE の削除

以下のように空の文字列に設定すると、$ECODE を削除できます。

   SET $ECODE=""

$ECODE を空の文字列に設定すると、以下のような効果があります。

  • 既存の $ECODE 値をすべて削除します。既存の $ZERROR 値には効果がありません。

  • ジョブのエラー・スタックを削除します。つまり、$STACK 関数の後続の呼び出しは、最後のエラー・スタックではなく、現在の実行スタックを返します。

  • $ETRAP エラー・ハンドラの制御のエラー処理フローに影響します。詳細は、"ObjectScript の使用法" の "エラー処理" を参照してください。

NEW を使用して、$ECODE 特殊変数をリセットすることはできません。変更を試みると、<SYNTAX> エラーが生成されます。

$ECODE の設定

$ECODE を空の文字列以外の値に設定すると、エラーを強制的に発生させることができます。$ECODE を NULL 以外の値に設定すると、ObjectScript ルーチンの実行中にインタプリタ・エラーが強制的に発生します。InterSystems IRIS は、指定した NULL 以外値に $ECODE を設定した後、以下の手順を実行します。

  1. 指定された値を $ECODE に書き込みます。以前の値はオーバーライドされます。

  2. これは、<ECODETRAP> エラーを生成します ($ZERROR に <ECODETRAP> を設定します)。

  3. 作成したエラー・ハンドラに制御を渡します。エラー・ハンドラは、選択した $ECODE 文字列の値を確認し、状況に応じて適切に処理します。

$ECODE の文字列オーバーフロー

$ECODE の蓄積文字列長が 512 文字を超えると、文字列オーバーフローの原因となるエラー・コードは、$ECODE 内のエラー・コードの現在のリストを削除して置き換えます。この場合、$ECODE のエラー・リストは、オーバーフローを発生させたエラーで始まる、最新の文字列オーバーフローのエラー・リストです。最大文字列データ長に関する詳細は、"ObjectScript の使用法" を参照してください。

独自のエラー・コードの作成

$ECODE 特殊変数の ANSI 標準形式は、1 つ以上のエラー・コードのコンマで囲まれたリストです。文字 U で始まるエラー・コードは、ユーザ用に予約されています。その他すべてのエラー・コードは InterSystems IRIS 用に予約されています。

ユーザ定義の $ECODE 値は、InterSystems IRIS が自動的に生成する値と区別できるようにする必要があります。そのためには、以下のようにエラー・テキストの最初に "U" を配置します。エラー・コードをコンマで記述することも忘れないでください。例えば以下のようになります。

   SET $ECODE=",Upassword expired!,"

$ECODE ではなく $ZERROR を確認

エラー・ハンドラでは、最新の InterSystems IRIS エラーについて、$ECODE ではなく $ZERROR を確認する必要があります。

関連項目

FeedbackOpens in a new tab