例: FNC_GetXMLClobを使用してXML型の入力値を取得する - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Published
2021年7月
Language
日本語
Last Update
2021-09-23
dita:mapPath
ja-JP/rin1593638965306.ditamap
dita:ditavalPath
ja-JP/wrg1590696035526.ditaval
dita:id
B035-1147
Product Category
Software
Teradata Vantage

次の関数は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;
     }
 }