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

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

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

void xmlUDF4(LOB_LOCATOR* input_clob,
             XML_HANDLE  *xml_handle,
             int*       indicator_inputCLOB,
             int*       indicator_returnXML,
             char       sqlstate[6],
             SQL_TEXT   extname[129],
              SQL_TEXT   specific_name[129],
              SQL_TEXT   error_message[257] )

{
     LOB_RESULT_LOCATOR xmlClob;
     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_GetXMLResultClob(*xml_handle,&xmlClob); 

     /* Use LOB FNC calls to read the input CLOB into the XML clob */                                                                                                                           
      FNC_LobOpen(*input_clob, &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_SetXMLClob(*xml_handle,xmlClob); 
      *indicator_returnXML = 0;
     }
 }