Example C Program - Teradata Preprocessor2

Teradata® Preprocessor2 for Embedded SQL Programmer Guide

Product
Teradata Preprocessor2
Release Number
17.00
Published
June 2020
Language
English (United States)
Last Update
2020-06-19
dita:mapPath
whb1544831946911.ditamap
dita:ditavalPath
obe1474387269547.ditaval
dita:id
B035-2446
lifecycle
previous
Product Category
Teradata Tools and Utilities

The following PP2 example C program creates a table with one of the columns as CLOB data type, inserts the data using a descriptor, and retrieves it back. It also contains an embedded SQL statement for setting USINGLOBDATA ON.

EXEC SQL BEGIN DECLARE SECTION;
struct {
          char SqlDAID[8];
          int SqlDABC;
          shortSqlN;
          shortSqlD;
          struct {
                  short SqlTYPE;
                  short SqlLEN;
                  char *SqlDATA;
                  char *SqlIND;
                  struct {
                          short strlen;
                          char str[30];
                         } SqlNAME;
                  int sqllenx;
                  } SqlVAR[3];
       } MYSQLDAP;

char LOGON_STRING[30];
int res=1;
int col1;
int col3;
struct {
        long long length;
        char data;
        } col2;
int f1hv;
int f3hv;
char f2hv[5];

VARCHAR SQL_STATEMENT[100];
VARCHAR errmsg[81];

long error_code;
short maxlen = 80;
EXEC SQL END DECLARE SECTION;

char REQUEST_TYPE[9];
int NUMVARS;

EXEC SQL INCLUDE SqlCA;

/*********************************************************************/
/********** ERROR CHECK                                              */
/*********************************************************************/

ERROR_CHECK ()
{
  if (SqlCA.SqlCode != 0)
  {
    PPRTEXT (&SQL_RDTRTCON, &error_code, &errmsg, &maxlen);
    errmsg.arr[errmsg.len] = '\0';
    printf ("\n");
    printf ("ERROR/WARNING DETECTED IN %s\n", REQUEST_TYPE);
    printf ("SQL CODE  : %d\n", sqlca.sqlcode);
    printf ("   ERROR CODE: %d\n", sqlca.sqlerrd[0]);
    printf ("   MSG : %s\n", errmsg.arr);
  }
}
 /*********************************************************************/
 /********** MAIN                                                     */
 /*********************************************************************/
  main (int i,char **j)
  {
/*********************************************************************/
/********** LOGON                                                    */
/*********************************************************************/
  strcpy (REQUEST_TYPE, "LOGON");

  strcpy (LOGON_STRING, j[1]);

EXEC SQL
 LOGON :LOGON_STRING;
ERROR_CHECK ();

if (SqlCA.SqlCode != 0)
   return;

printf ("\n");
printf ("LOGON SUCCESSFUL\n");
  strcpy (REQUEST_TYPE, "CREATE");
EXEC SQL
 CREATE TABLE CLOB1(F1 int,F2 CLOB,F3 int);
ERROR_CHECK ();

if (SqlCA.SqlCode == 0)
 printf ("CREATE SUCCESSFUL\n");

  strcpy (REQUEST_TYPE, "SET");
EXEC SQL
   SET USINGLOBDATA ON;
ERROR_CHECK ();

if (SqlCA.SqlCode == 0)
 printf ("SET ON SUCCESSFUL\n");
/*********************************************************************/
/********** PREPARE                                                  */
/*********************************************************************/
  strcpy (REQUEST_TYPE, "INSERT");
  strcpy (SQL_STATEMENT.arr, "INSERT INTO CLOB1 VALUES(?,?,?);");
  SQL_STATEMENT.len = strlen (SQL_STATEMENT.arr);

  strcpy (REQUEST_TYPE, "PREPARE");
  EXEC SQL
   PREPARE CLOBSTMT FROM :SQL_STATEMENT;
  ERROR_CHECK ();

  if (SqlCA.SqlCode != 0)
    res=0;
  else
    printf("PREPARE SUCCESSFUL\n");

  col1 = 1;
  col2.length = 1;
  col2.data = '3';
  col3 = 500;

  printf("BLOB DATA : %c\n",col2.data);
  printf("LENGTH OF BLOB %lld\n",col2.length);
  printf("\n Size of BLOB is: %d\n", sizeof(col2.data));

  NUMVARS =3;

  MYSQLDAP.SqlDABC = (16 + (44 * NUMVARS));
  MYSQLDAP.SqlN= NUMVARS;
  MYSQLDAP.SqlD= NUMVARS;
  MYSQLDAP.SqlVAR[0].SqlTYPE = 496;
  MYSQLDAP.SqlVAR[0].SqlLEN  = 4;
  MYSQLDAP.SqlVAR[0].SqlDATA = (char *) (&col1);
  MYSQLDAP.SqlVAR[0].SqlIND  = 0;
  MYSQLDAP.SqlVAR[0].sqllenx  = 4;
  MYSQLDAP.SqlVAR[1].SqlTYPE = 417;
  MYSQLDAP.SqlVAR[1].SqlLEN  = 9;
  MYSQLDAP.SqlVAR[1].SqlDATA =  (char *) (&col2);
  MYSQLDAP.SqlVAR[1].SqlIND  = 0;
  MYSQLDAP.SqlVAR[1].sqllenx  = 9;
  MYSQLDAP.SqlVAR[2].SqlTYPE = 496;
  MYSQLDAP.SqlVAR[2].SqlLEN  = 4;
  MYSQLDAP.SqlVAR[2].SqlDATA = (char *) (&col3);
  MYSQLDAP.SqlVAR[2].SqlIND  = 0;
  MYSQLDAP.SqlVAR[2].sqllenx  = 4;

  strcpy (REQUEST_TYPE, "EXECUTE");
  EXEC SQL
   EXECUTE CLOBSTMT USING DESCRIPTOR MYSQLDAP;
  ERROR_CHECK ();

  if (SqlCA.SqlCode != 0)
    res=0;
  else
    printf ("INSERT IS SUCCESSFULL\n");

  strcpy (REQUEST_TYPE, "SELECT");
  EXEC SQL
     SELECT F1,F2,F3 INTO :f1hv,:f2hv,:f3hv FROM CLOB1;
  ERROR_CHECK ();

  printf("\n F1 value %d",f1hv);
  printf("\n F2 value %s",f2hv);
  printf("\n F3 value %d\n",f3hv);

  strcpy (REQUEST_TYPE, "DROP");
  EXEC SQL
  DROP TABLE CLOB1;
  ERROR_CHECK ();

/*********************************************************************/
/********** LOGOFF                                                   */
/*********************************************************************/
    strcpy (REQUEST_TYPE, "LOGOFF");
    EXEC SQL
     LOGOFF;
    ERROR_CHECK ();
  }