機械翻訳について

エラー・チェックと分岐

IfErrorは、ラベル名で定義されたスクリプト内の特定のロケーションまで後続の文をスキップして、前の文のエラーに応答するようにMaxL Shellに指示します。

IfErrorでは、先行する文にのみエラーがあるかどうかがチェックされます。 IfErrorは、次のことをチェックします:

  • MaxL文の実行エラー

  • 次のようなMaxL Shellコマンド実行のエラー:

    • spool on/offのエラー(権限エラーなど)

    • 無効な幅など、set column_widthのエラー

    • 権限エラーや存在しないインクルード・ファイルなどのスクリプト・ネストのエラー

gotoは、ラベル名で定義されたスクリプト内の特定のロケーションにMaxL Shellを強制的に分岐させます。gotoはエラーの発生に依存しません。

構文

iferror LABELNAME
goto LABELNAME
define label LABELNAME

例: Iferror (MaxL)

次のスクリプト例には、ディメンション構築文とデータ・ロード文が含まれています。 ディメンションの構築に失敗した場合、データ・ロードはスキップされます。

login $1 $2;

import database sample.basic dimensions
 from data_file 'C:\\data\\dimensions.txt'
 using rules_file 'C:\\\\data\\rulesfile.rul'
 on error append to 'C:\\\\logs\\dimbuild.log'; 
 
iferror 'dimbuildFailed';

import database sample.basic data from data_file 
"$ARBORPATH\\app\\sample\\basic\\calcdat.txt" 
 on error abort; 

define label 'dimbuildFailed';
exit;

例: Iferror (MaxL Shell)

次のスクリプト例では、MaxL Shellエラーを含む様々なエラーをテストし、終了ステータス変数をゼロ以外の引数に設定して終了ステータスをMaxL Shellに返す方法を示します。

###  Begin Script ###

login $1 $2;
echo "Testing syntactic errors...";

spool on to spool.out;

set timestampTypo on;
iferror 'End';

msh "doesnotexistlerr.mxl";
iferror 'FileDoesNotExistError';

echo "Script completed successfully...";
spool off;
logout;
exit 0;


define label 'FileDoesNotExistError';
echo "Error detected: Script file does not exist";
spool off;
logout;
exit 1;

define label 'ShellError';
echo ' Shell error detected...';
spool off;
logout;
exit 2;

define label 'End';
echo ' Syntax error detected...';
spool off;
logout;
exit 3;

###  End Script ###

例: Goto

次のスクリプト例には、ディメンション構築文とデータ・ロード文が含まれています。 移動先は、データ・ロードをスキップするために使用します。

login $1 $2;

import database sample.basic dimensions
 from data_file 'C:\\data\\dimensions.txt'
 using rules_file 'C:\\\\data\\rulesfile.rul'
 on error append to 'C:\\\\logs\\dimbuild.log'; 
 
goto 'Finished';

import database sample.basic data from data_file 
"$ARBORPATH\\app\\sample\\basic\\calcdat.txt" 
 on error abort; 

define label 'Finished';
exit;

ノート

MaxL Shellは、スクリプト内でLABELNAMEまでスキップしますが、逆方向にはスキップしません。