SQL警告を意図的に発生させる - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQL外部ルーチン プログラミング

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Published
2021年7月
Language
日本語
Last Update
2021-09-23
dita:mapPath
ja-JP/rin1593638965306.ditamap
dita:ditavalPath
ja-JP/wrg1590696035526.ditaval
dita:id
B035-1147
Product Category
Software
Teradata Vantage

コードのうち、関数に問題があると思われる部分で、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.