17.00 - 17.05 - 例: FNC_GetXMLByteとFNC_SetXMLByte - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.00
17.05
Published
2020年6月
Content Type
プログラミング リファレンス
Publication ID
B035-1147-170K-JPN
Language
日本語 (日本)

次のUDFはXMLパラメータを入力として取り、バイナリ形式でXML値を取得し、バイナリ形式で戻りXML値を設定します。XMLサイズは小さく、単純な読み取りを使用して読み取るのに十分であると想定されています。

CREATE FUNCTION xmlUDF6(P1 XML)
RETURNS XML
NO SQL
PARAMETER STYLE SQL
DETERMINISTIC
LANGUAGE C
EXTERNAL NAME 'CS!xmlUDF6!xmlUDF6.c';

void xmlUDF6(XML_HANDLE* xml_handle,
             XML_HANDLE* return_handle,
             int* indicator_thisXML,
             int* indicator_returnValue,
             char    sqlstate[6],
             SQL_TEXT    extname[129],
             SQL_TEXT    specific_name[129],
             SQL_TEXT    error_message[257] )
{
     FNC_XMLSize_t xmlSize;
     byte* xmlBuffer;
     FNC_XMLSize_t xmlBufferSize;
     int numLobs;

    /* Get the XML Size */
      FNC_GetXMLInfo(*xml_handle, &xmlSize, &numLobs); 

     if(numLobs ==1 )
     {  /* Return null if a LOB is passed in */
        *indicator_returnValue = -1;
         return;
     }

    /* Read the XML value */
     xmlBuffer = (byte*)FNC_Malloc(xmlSize);
     xmlBufferSize = xmlSize;
      FNC_GetXMLByte(*xml_handle,xmlBuffer, xmlBufferSize, &xmlSize); 
                                                                                                                           
     /* Set the return value */
      FNC_SetXMLByte(*return_handle, xmlBuffer, xmlSize); 
    *indicator_returnValue = 0;
     FNC_free(xmlBuffer);
}