SQL エラー マッピング機能を使用すると、アプリケーションで SQLCODE、SQLSTATE、SQLERR、および MFSQLMESSAGETEXT フィールドにエラー情報を返す方法をカスタマイズできます。これは、OpenESQL とデータベースの両方から通常返される値を、指定した値に置き換えることによって行われます。この機能は、異なるデータベース間でアプリケーションを移行する場合や、エラー状態および警告状態に関する特定の値を受け取ることにアプリケーション
               ロジックが依存している場合に役立ちます。
               
注: SQL エラー マッピング機能は、RETURNED_SQLCODE、RETURNED_SQLSTATE、および MESSAGE_TEXT のデータを使用して、GET DIAGNOSTICS 文にも適用されます。
               
 
               	 
              
            	 
            特定のデータベース用に設計されたロジックを含むアプリケーションでエラー コード ロジックを変更するのは、手間がかかる場合があります。次のシナリオを考えてみます。
 
            	 
             
               		
               - 現在のコードでは、結果セットの処理の最後に Oracle SQLCODE 1403 を想定しており、他のデータベースによって生成された SQLCODE 100 は想定していない。
  
               		
               - 現在のコードでは、SELECT INTO が複数の行を返す場合、z/OS DB2 SQLCODE -811 を想定している。
  
               		
               - 現在のコードでは、FETCH 文の後にデータ切り捨ての警告を想定していないが、新しいデータベースは SQLCODE 1 を設定する。
  
               		
               - 重複キー エラーを発生させる行の挿入時、現在のコードでは、元のデータベースのエラー コードを想定している。
  
               	 
            
 
            	 
            これらは単純な例のごく一部ですが、エラー コード マッピングを使用すると、アプリケーション コードで現在のエラー処理を維持するための柔軟性を最大限に得られます。エラー状況で新しいデータベースが返す内容に基づいて検索条件を指定し (SQLCODE
               または SQLSTATE の戻り値が重要でない場合は値 0 を使用)、元のデータベースのエラー値を指定すると、アプリケーションが想定しているエラー コードを確実に受け取ることができます。
            
 
            	 
            エラー マッピングは、有効になっている場合、埋め込み SQL 文の実行が完了した後に処理されます。SQLCODE がゼロ以外であるか、SQLSTATE が '00000' でない場合、エラー マップを使用して、SQLCODE、SQLSTATE、およびオプションで関連するエラー メッセージをエラー マップの値に置き換えるかどうかが決定されます。これは、次の条件のいずれかが満たされるまで、エラー マップ レコードを順番にスキャンすることによって行われます。
            
 
            	 
             
               		
               - マップの最後に到達する。この場合、SQLCODE、SQLSTATE、およびエラー メッセージは変更されません。
  
               		
               - SQLCODE、SQLSTATE、およびエラー メッセージに存在するサブストリングの組み合わせで、一致がある。
  
               	 
            
 
            	 
            
               SQL エラー マッピング ファイル
 
               		 
               		
               エラー マッピングは、エラー マッピング ファイルを使用して制御します。これは、マップするエラー状態、SQLCODE と SQLSTATE の置換値、およびオプションでエラー メッセージの置換値 (エラー メッセージの完全な抑制を含む) を指定する単純なテキスト
                  ファイルです。SQLCODE の戻り値、SQLSTATE の戻り値、または返されたエラー メッセージ内のサブストリング、あるいはこれらの任意の組み合わせに基づいて、マッピングを指定できます。
               
 
               		
                
                  		   
                  			 
                  - 場所
  
                  			 
                  - マッピング ファイルのデフォルトの場所は次のとおりです。 %ProgramData%\Micro Focus\sqlcodes(Windows) または $COBDIR/etc/MicroFocus/sqlcodes(UNIX)
注: MF_ERRORMAP_PATH システム環境変数を使用して、デフォルトの場所をオーバーライドできます。
                     
 
                     			 
                    
                  		   
                  		   
                  			 
                  - ファイル名
  
                  			 
                  - 任意のプレフィックスを使用して、SQL エラー マッピング ファイルの名前を指定できます。ただし、すべてのエラー マッピング ファイルは拡張子が .emap である必要があります。
                  
  
                  		   
                  		   
                  			 
                  - 内容
  
                  			 
                  - マッピング ファイルの各レコードには、カンマで区切られた次の値がこの順序で含まれます。
{SC-ret-val|0},{SS-ret-val|0},[msg-substr],SC-repl-val,SS-repl-val,[msg-substr-repl-val]詳細は次のとおりです。 
                        				   
                        					 
                        - SC-ret-val|0
                        
  
                        					 
                        - データベースからの SQLCODE の戻り値。SQLCODE の戻り値を置換条件として使用しない場合は 0 (ゼロ)。
  
                        				   
                        				   
                        					 
                        - SS-ret-val|0
                        
  
                        					 
                        - データベースからの SQLSTATE の戻り値。SQLSTATE の戻り値を置換条件として使用しない場合は 00000 (すべてゼロ)。
  
                        				   
                        				   
                        					 
                        - msg-substr
  
                        					 
                        - データベースから返されるエラー メッセージに含まれる文字列を指定します (該当する場合)。このサブストリングがエラー メッセージ内に存在する場合に、SQLCODE および SQLSTATE の条件も満たされていると、エラーがマップされます。サブストリングの指定では、次の構文規則が適用されます。
                           
 
                              						  
                              - サブストリングにカンマが含まれている場合は、サブストリング全体を一重引用符 (') または二重引用符 (') で囲みます。
  
                              						  
                              - メッセージのサブストリングでは大文字と小文字が区別されます。
  
                              						
                           
 
                           						
                           注: サブストリングの検索では、SQLERRMC で返される 70 バイトのサブセットではなく、エラー メッセージ全体が使用されます。
                           
 
                           						
                           サブストリングを指定する以外に、次のような 2 つのオプションもあります。
 
                           						
                            
                              						  
                              - 次のカンマ区切り文字の前にスペースを含めて、値を省略する。この場合、元のメッセージが返されるため、実質的にサブストリングのエラー メッセージ置換がオフになります。
  
                              						  
                              - 1 つのチルダ (~) 文字を指定する。この場合、SQLERRMC、MFSQLMESSAGETEXT (または GET DIAGNOSTICS での MESSAGE_TEXT のホスト変数) で構成されるメッセージ受信フィールドにスペースが入力されます。SQLCA
                                 の SQLERRML も、SQLERRMC で返される文字数ではなくゼロに設定されます。
                              
  
                              						
                           
 
                          
                        				   
                        				   
                        					 
                        - SC-repl-val
  
                        					 
                        - 元のデータベースの SQLCODE の置換値。
  
                        				   
                        				   
                        					 
                        - SS-repl-val
  
                        					 
                        - 元のデータベースの SQLSTATE の置換値。
  
                        				   
                        				   
                        					 
                        - msg-substr-repl-val
  
                        					 
                        - エラー メッセージの置換値 (該当する場合)。msg-substr の構文規則は、msg-substr-repl-val にも適用されます。省略した場合、元のエラー メッセージは置き換えられません。メッセージを完全に抑制するには、1 つのチルダ (~) 文字を指定します。
                        
  
                        				   
                        				
                     
 
                     			 
                    
                  		   
                  		   
                  			 
                  - SQL エラー マッピング レコードの例
  
                  			 
                  -  
                     				
                     
 
                        				   
                        					 
                        - 例 1
  
                        					 
                        - この例は、DB/2 for z/OS から PostgreSQL への移行に基づいています。このマッピング ファイル レコードでは、シングルトン SELECT が 1 から -811 の行を複数返す場合に返される SQLCODE を変更しますが、エラー
                           メッセージはそのままにします。一致は、SQLCODE および SQLSTATE に基づきます。
1, 21000, ,-811, 21000
 
                           					   
                        				   
                        				   
                        					 
                        - 例 2
  
                        					 
                        - この例は、DB/2 for z/OS から PostgreSQL への移行に基づいています。このレコードでは、主キーまたは一意制約のエラーが発生した場合に文字列「duplicate」を含むエラーをマップし、エラー メッセージを「Unique constraint
                           violation」に変更します。SQLCODE についても SQLSTATE についても PostgreSQL が提供する戻り値は重要でないことに注意してください。検索条件は、返された PostgreSQL エラー メッセージのみに基づいています。
0, 00000,"duplicate", -803, 22002, Unique constraint violation
 
                           					   
                        				   
                        				   
                        					 
                        - 例 3
  
                        					 
                        - ODBC では、ホスト変数が戻り値より小さい場合、警告を生成します。アプリケーションで SQLCODE が負ではなくゼロ以外であることを検証すると、予想とは異なる結果が生じる場合があります。エラー メッセージを含め、警告状態を完全に抑制するには、次のレコードを定義して、SQLSTATE の値が 01004 である警告を従来同様に 00000 を戻すようにします。
0, 01004, , 0, 00000, ~
 
                           					   
                        				   
                        				   
                        					 
                        - 例 4
  
                        					 
                        - 例 3 に代わる方法として、UTF-8 を使用する環境へのレガシー アプリケーションの移行時、ホスト変数が十分に大きいかどうかをテストする場合に、次のレコードはこの警告を SQLCODE -55 および SQLSTATE "22XYZ" のエラーに変更します。
0, 01004, , -55, 22XYZ, Host variable too small
 
                           					   
                        				   
                        				
                     
 
                     			 
                    
                  		   
                  		
               
 
               	 
              
            	 
            
               SQL エラー マッピングの有効化
 
               		 
               		
               エラー マッピングを有効にするには、ERRORMAP SQL コンパイラ指令オプションを使用します。詳細については、「ERRORMAP」を参照してください。
               
               		
               1 つのプログラムで複数のエラー マッピング ファイルを使用する場合、詳細については、「SET ERRORMAP」リファレンス トピックを参照してください。