GLOPデータを使用する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

この関数は、GLOPセットをマッピングし、GLOPデータを読み取ります。

/********** File: glop_map1.c **********/
#define SQL_TEXT Latin_Text
#include <sqltypes_td.h>
#include <string.h>
#include <stdlib.h>
#define IsNull -1
#define IsNotNull 0
#define LOOPSIZE 20

/*************************************************************/
/* Function to read GLOP data for the given record_n number. */
/*************************************************************/

struct Company
{
   INTEGER deptid;
   char deptname[30];
};

struct Company_Info
{
  struct Company Dept[LOOPSIZE];
}*COMPANY_DETAILS;

void glop_map1( INTEGER *record_n,
                VARCHAR_LATIN *Deptname1,
                INTEGER *record_nIsNull,
                INTEGER *Deptname1IsNull,
                char sqlstate[6],
                SQL_TEXT extname[129],
                SQL_TEXT specific_name[129],
                SQL_TEXT error_message[257] )
{

   int glop_stat, MAP_ADD;
   int i;
   GLOP_Map_t *MyGLOP;

   if (*record_nIsNull == IsNull)
   {
      strcpy(sqlstate, "22004") ;
      strcpy((char *) error_message, "Null value not allowed.") ;
      *Deptname1IsNull = IsNull;
      return;
   }

   strcpy((char *) error_message, " ");
   *Deptname1IsNull = IsNotNull;

   MAP_ADD = 0; // Use the first GLOP section of the GLOP set.
   i = *record_n;
   glop_stat = FNC_Get_GLOP_Map(&MyGLOP);

   // Check whether mapping is established or not

   if (glop_stat)
   {
      if (glop_stat == -1)
         strcpy((char*)error_message,
            "Map not set up. Exceeded GLOP data mapping limits.");
      else if (glop_stat == -2)
         strcpy((char*)error_message,
            "Not member of GLOP set or no rows in GLOP tables.");
      strcpy(sqlstate,"U0001");
      return;
   }

   // Check whether specified row for the GLOP exists or not

   if (MyGLOP->GLOP[MAP_ADD].GLOP_ptr == NULL)
   {
      strcpy((char*)error_message,"Map does not exist at index 0.");
      strcpy(sqlstate,"U0002");
      return;
   }

   if (MyGLOP->GLOP[MAP_ADD].size == 0)
   {
      strcpy((char*)error_message,"Nothing is mapped.");
      strcpy(sqlstate,"22023");
      return;
   }

   // Assign the mapped address of GLOP data to the structure.

   COMPANY_DETAILS = MyGLOP->GLOP[MAP_ADD].GLOP_ptr;

   // Read the data.
   strcpy(Deptname1,COMPANY_DETAILS->Dept[i].deptname);

}