17.00 - 17.05 - 例: FNC_GetXMLClobを使用して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のCLOB表現を取得します。これはユーザーにCLOBを返します。

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

void xmlUDF2(XML_HANDLE  *xml_handle,
              LOB_RESULT_LOCATOR *return_clob,
              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 xmlClob;
     BYTE buffer[100000];
     LOB_CONTEXT_ID id;
     FNC_LobLength_t actlen;
     int trunc_err = 0;
     int numLobs;
     FNC_XMLSize_t xmlSize;
    
     FNC_GetXMLInfo(*xml_handle, &xmlSize, &numLobs);
  
      if(numLobs == 1) 
     {

      /* Read XML value */ 
       FNC_GetXMLClob(*xml_handle,&xmlClob); 

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

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