C関数定義 - 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 SQL_TEXT Latin_Text
#include <sqltypes_td.h>
#include <string.h>

void xsp_getregion ( VARCHAR_LATIN *region,
                     int           *region_isnull,
                     char          sqlstate[6],
                     SQL_TEXT      extname[129],
                     SQL_TEXT      specific_name[129],
                     SQL_TEXT      error_message[257])
{

  char   tmp_string[64];
  void  *argv[2];
  int    ind[2];
  parm_t dtype[2];
  INTEGER regionCount;   /* OUT argument from addRegion */

  /* Set the return indicator value for the external stored procedure*/
  *region_isnull = 0;

  if (strlen((const char *)region) > 4)
  {
    /* Strip off the first four characters */
    strcpy(tmp_string, (char *)region);
    strcpy((char *)region, &tmp_string[4]);

    /* Set the pointers to the stored procedure arguments */
    argv[0] = region;         /* IN */
    argv[1] = &regionCount;   /* OUT */

    /* Set the indicator for the IN argument */
    ind[0] = 0;

    memset(dtype, 2, sizeof(parm_t)*2);

    /* Data type for the VARCHAR IN argument */
    dtype[0].datatype = VARCHAR_DT;
    dtype[0].direction = IN_PM;
    dtype[0].charset = LATIN_CT;
    dtype[0].size.length = strlen((const char *)region);

    /* Data type for the INTEGER OUT argument */
    dtype[1].datatype = INTEGER_DT;
    dtype[1].direction = OUT_PM;

    FNC_CallSP((SQL_TEXT *)"addRegion", 2, argv, ind, dtype, sqlstate);

    if (strcmp(sqlstate, "00000") != 0)
    {
      strcpy((char *)error_message, "Bad call to addRegion");
      return;
    }
  }
  else
  {
    strcpy(sqlstate, "U0001");
    strcpy((char *)error_message, "Region string too short");
    return;
  }
}