17.00 - 17.05 - 例: FNC_GetXMLBlobを使用してXML型の入力値を取得する - 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
日本語 (日本)

次の関数はXML型のパラメータを受け取り、XMLのBLOB表現を取得します。これはユーザーにBLOBを返します。

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

void xmlUDF5(XML_HANDLE  *xml_handle,
              LOB_RESULT_LOCATOR *return_blob,
              int*       indicator_thisXML,
              int*       indicator_returnLOB,
              char       sqlstate[6],
              SQL_TEXT   extname[129],
              SQL_TEXT   specific_name[129],
              SQL_TEXT   error_message[257] )
{
     LOB_LOCATOR xmlBlob;
     BYTE buffer[100000];
     LOB_CONTEXT_ID id;
     FNC_LobLength_t actlen;
     int trunc_err = 0;
     FNC_XMLSize_t xmlSize;
     int numLobs;

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

     if(numLobs ==1 )
     {
    
      /* Read XML value */ 
       FNC_GetXMLBlob(*xml_handle,&xmlClob); 

      /* Use LOB FNC calls to read the XML BLOB and return it */                                                                                                                           
       FNC_LobOpen(*xmlBlob, &id, 0, 0);
       while( FNC_LobRead(id, buffer, 100000, &actlen) == 0 && !trunc_err)
          trunc_err = FNC_LobAppend(*return_blob, buffer, actlen, &actlen);

       FNC_LobClose(id);
      *indicator_returnLob = 0;
    }
 }