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 (); }