SIGNALコマンドは、プログラム内部からユーザー定義のエラー・メッセージを生成します。TRAPがオンのときにOracle OLAPによってSIGNAL文が実行されると、実行はトラップ・ラベルに分岐します。そして、プログラム内のトラップ・ラベルに続く文が実行されます。プログラムにアクティブなトラップ・ラベルがある場合、プログラムの実行はそのラベルに分岐します。トラップ・ラベルがない場合、プログラムの実行は終了し、そのプログラムが他のプログラムによってコールされていた場合は、コール側プログラムに実行の制御が戻ります。
パラメータ
生成されるエラー・メッセージの名前を示すTEXT式。errnameは、SIGNAL文の実行時にOracle OLAPによってERRORNAMEオプションに格納されます。通常、エラーの名前はエラー・メッセージに表示されません。ただし、messageを省略すると、message引数に示すストック・メッセージとともにエラー名(errname)が表示されます。
特別な名前PRGERR
を使用すると、エラーが発生したコール側プログラムと通信できます。SIGNAL
PRGERR
文は、ERRORNAMEを空白値に設定し、別のエラー・メッセージを表示せずにエラー状態をコール側プログラムに渡します。ネストしたプログラムの連鎖をさかのぼってSIGNALでエラーを渡す方法については、TRAPコマンドを参照してください。
生成するエラー・メッセージを指定するTEXT式。長い行のエラー・メッセージを作成する場合、自分で改行を追加してテキストを書式設定する必要があります。各行の終わりに改行のエスケープ・シーケンス(\n)を入力します。入力できるテキストは、最大で6行または4,000文字のいずれか先に達した方です。1行で4,000文字を超過するテキストを入力しようとすると、エラーが発生します。
この引数を省略すると、SIGNALは次のメッセージを生成します。
ERROR: (errname) Please contact the administrator of your Oracle Oracle OLAP application.
messageは、SIGNAL文の実行時にOracle OLAPによってERRORTEXTオプションに格納されます。
現在実行しているすべてのプログラムの実行を即座に停止します。エラー・メッセージは生成されません。このエラー状態は、アクティブなTRAPラベルではトラップされません。
例
例10-123 エラーの通知
1つの引数を必要とするプログラムを記述したとします。引数を指定しないと、プログラムを実行する目的がなくなります。このため、最初にプログラムは引数が渡されたかどうかを確認します。引数が渡されていない場合、プログラムはエラー・メッセージを現行の出力ファイルに送信してから終了します。
次のプログラム行は、引数の有無を確認し、見つからない場合はエラーを通知します。
IF ARGS EQ '' THEN SIGNAL msg1 'You must supply an argument.'
SIGNALは、次のメッセージを現行の出力ファイルに送信します。
ERROR: You must supply an argument.
例10-124 引数の値が無効な場合のエラーの通知
プログラムで、1から9か月までのデータを表示できるレポートを作成するとします。プログラムが9より大きな引数でコールされる場合、エラーを通知できます。この例では、nummonths
が、9より大きいとエラーになる引数の名前です。
select: TRAP ON error PUSH month LIMIT month TO nummonths IF STATLEN(month) GT 9 THEN SIGNAL toomany - 'You can specify no more than 9 months.' REPORT DOWN district W 6 units finish: POP month RETURN error: POP month IF ERRORNAME EQ 'TOOMANY' THEN SHOW 'No report produced'