FNC_LobLoc2Refの使用例 - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/qwr1571437338192.ditamap
dita:ditavalPath
ja-JP/qwr1571437338192.ditaval
dita:id
B035-1147
Product Category
Software
Teradata Vantage
#define BUFFER_SIZE 500

/* Aggregate intermediate record */
typedef struct
{
   FNC_LobLength_t length;
   LOB_REF         ref;
   BYTE            prefix[BUFFER_SIZE];
} intrec_t;
void Max_Blob(FNC_Phase          phase,
              FNC_Context_t      *fctx,
              LOB_LOCATOR        *x,
              LOB_RESULT_LOCATOR *result,
              int                *x_i,
              int                *result_i,
              char               sqlstate[6])
{
   intrec_t        *s1 = (intrec_t*) fctx->interim1;
   LOB_CONTEXT_ID  id;
   FNC_LobLength_t actsize;

   switch (phase)
   {
   case AGR_INIT:
      s1 = (intrec_t *)FNC_DefMem(sizeof(intrec_t));
      s1->length = FNC_GetLobLength(*x);
      FNC_LobOpen(*x, &id, 0, BUFFER_SIZE);
      FNC_LobRead(id, s1->prefix, BUFFER_SIZE, &actsize);
      FNC_LobClose(id);

      /* if the object length is less than the size
         allotted, pad the remaining bytes with zeros. */
      while (actsize < BUFFER_SIZE)
         s1->prefix[actsize++] = 0;
 FNC_LobLoc2Ref(*x, &s1->ref); 

   case AGR_DETAIL:

      ...

      break;

   ...

}

FNC_LobLoc2Refを使用する完全な例については、LOBを使用したC集約関数を参照してください。