Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

$ECODE

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

Synopsis

$ECODE
$EC

概要

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

,M7,

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

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

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

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

,ZSTORE,M6,ZILLEGAL VALUE,ZPROTECT,

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

また、$ECODE は明示的にクリア、あるいは設定できます。現在のプロセスを終了すると、$ECODE は常にクリアされます。

$ECODE の削除

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

   SET $ECODE=""

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

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

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

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

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

$ECODE の設定

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

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

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

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

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

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

メモ

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

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

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

   SET $ECODE=",Upassword expired!,"

Caché エラーには $ECODE ではなく $ZERROR を確認

エラー・ハンドラは、最新の Caché エラーについては $ECODE ではなく、$ZERROR を確認します。

関連項目

FeedbackOpens in a new tab