コードのうち、関数に問題があると思われる部分で、SQL警告を意図的に発生させることができます。警告を意図的に発生させるには、sqlstate戻り引数を01Hxxに設定します(xxは任意の数値)。
パラメータ スタイルSQLを使用する場合は、error_message戻り引数を256文字以下のSQL_TEXT文字列に設定することもできます。
関数の戻り状態として、警告が発行されます。警告が発行されてもトランザクションは終了しません。したがって、関数の戻り値は、トランザクションで使用可能な有効な値に設定する必要があります。
1回のリクエストで戻すことができる警告は1個だけです。
パラメータ スタイルSQLを使用するスカラー関数において、SQLSTATE結果コードおよびエラー メッセージの戻り引数を設定する方法を示す例を、以下に示します。
#define SQL_TEXT Latin_Text
#include <sqltypes_td.h>
#include <string.h>
void String_UDF(VARCHAR_LATIN *inputString,
CHARACTER_LATIN *result,
int *inputStringIsNull,
int *resultIsNull,
char sqlstate[6],
SQL_TEXT extname[129],
SQL_TEXT specific_name[129],
SQL_TEXT error_message[257])
{
if (strlen((char *)inputString) == 0) {
*result = 'F';
/* Force a warning using the SQLSTATE result code value */
strcpy(sqlstate, "01H01");
/* Set the error message return value */
strcpy((char *)error_message, "Zero length input string");
return;
}
...
}
BTEQセッションにおいてString_UDFに長さ0の文字列が渡されると、下記のようなSQLSTATE結果コードとエラー メッセージ戻り値を伴う警告が報告されます。
SELECT String_UDF('');
*** Query completed. One row found. One column returned.
*** Warning: 7505 in UDF dbname.String_UDF: SQLSTATE 01H01:
Zero length input string
*** Total elapsed time was 1 second.