17.00 - 17.05 - 例: FNC_GetXMLResultBlobとFNC_SetXMLBlob - 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
日本語 (日本)

次の関数は入力のBLOB値を受け取り、XML値をユーザーに返します。

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

void xmlUDF7(LOB_LOCATOR* input_blob,
             XML_HANDLE  *xml_handle,
             int*       indicator_inputBLOB,
             int*       indicator_returnXML,
             char       sqlstate[6],
             SQL_TEXT   extname[129],
             SQL_TEXT   specific_name[129],
             SQL_TEXT   error_message[257] )
{
     LOB_RESULT_LOCATOR xmlBlob;
     BYTE buffer[100000];
     LOB_CONTEXT_ID id;
     FNC_LobLength_t actlen;
     int trunc_err = 0;
     int numLobs;
     FNC_XMLSize_t xmlSize;
    
     /* Get the XML Size */
      FNC_GetXMLInfo(*xml_handle, &xmlSize, &numLobs); 

     if(numLobs ==1 )
     {

       /* Read XML return lob locator */ 
        FNC_GetXMLResultBlob(*xml_handle,&xmlBlob); 
      /* Use LOB FNC calls to read the input BLOB into the XML clob */                                                                                                                           
       FNC_LobOpen(*input_blob, &id, 0, 0);
        while( FNC_LobRead(id, buffer, 100000, &actlen) == 0 && !trunc_err)
        trunc_err = FNC_LobAppend(*xmlClob, buffer, actlen, &actlen);
       FNC_LobClose(id);

       /* Set the return XML value */
        FNC_SetXMLBlob(*xml_handle,xmlClob); 
       *indicator_returnXML = 0;
     }
 }