The included SQLDA
Only assembler, C, C++, COBOL, and PL/I C are supported for the SQLDA that is given by INCLUDE SQLDA.
assembler:
SQLTRIPL EQU C'3'
SQLDOUBL EQU C'2'
SQLSINGL EQU C' '
*
SQLSECT SAVE
*
SQLDA DSECT
SQLDAID DS CL8 ID
SQLDABC DS F BYTE COUNT
SQLN DS H COUNT SQLVAR/SQLVAR2 ENTRIES
SQLD DS H COUNT VARS (TWICE IF USING BOTH)
*
SQLVAR DS 0F BEGIN VARS
SQLVARN DSECT , NTH VARIABLE
SQLTYPE DS H DATA TYPE CODE
SQLLEN DS 0H LENGTH
SQLPRCSN DS X DEC PRECISION
SQLSCALE DS X DEC SCALE
SQLDATA DS A ADDR OF VAR
SQLIND DS A ADDR OF IND
SQLNAME DS H,CL30 DESCRIBE NAME
SQLVSIZ EQU *-SQLDATA
SQLSIZV EQU *-SQLVARN
*
SQLDA DSECT
SQLVAR2 DS 0F BEGIN EXTENDED FIELDS OF VARS
SQLVAR2N DSECT , EXTENDED FIELDS OF NTH VARIABLE
SQLLONGL DS F LENGTH
SQLRSVDL DS F RESERVED
SQLDATAL DS A ADDR OF LENGTH IN BYTES
SQLTNAME DS H,CL30 DESCRIBE NAME
*
SQLSECT RESTOREIn the above declaration, SQLSECT SAVE is a macro invocation that remembers the current CSECT name. SQLSECT RESTORE is a macro invocation that continues that CSECT.
C and C++:
#ifndef SQLDASIZE /* Permit duplicate Includes */
/**/
struct sqlvar
{ short sqltype;
short sqllen;
char *sqldata;
short *sqlind;
struct sqlname
{ short length;
char data[30];
} sqlname;
};
/**/
struct sqlvar2
{ struct
{ long sqllonglen;
unsigned long reserved;
} len;
char *sqldatalen;
struct sqldistinct_type
{ short length;
char data[30];
} sqldatatype_name;
};
/**/
struct sqlda
{ char sqldaid[8];
long sqldabc;
short sqln;
short sqld;
struct sqlvar sqlvar[1];
};
/**/
/*********************************************************************/
/* Macros for using the sqlvar2 fields. */
/*********************************************************************/
/**/
/*********************************************************************/
/* '2' in the 7th byte of sqldaid indicates a doubled number of */
/* sqlvar entries. */
/* '3' in the 7th byte of sqldaid indicates a tripled number of */
/* sqlvar entries. */
/*********************************************************************/
#define SQLDOUBLED '2'
#define SQLTRIPLED '3'
#define SQLSINGLED ' '
/**//*********************************************************************/
/* GETSQLDOUBLED(daptr) returns 1 if the SQLDA pointed to by */
/* daptr has been doubled, or 0 if it has not been doubled. */
/*********************************************************************/
#define GETSQLDOUBLED(daptr) \
(((daptr)->sqldaid[6] == ( char) SQLDOUBLED) ? \
(1) : \
(0) )
/**/
/*********************************************************************/
/* GETSQLTRIPLED(daptr) returns 1 if the SQLDA pointed to by */
/* daptr has been tripled, or 0 if it has not been tripled. */
/*********************************************************************/
#define GETSQLTRIPLED(daptr) \
(((daptr)->sqldaid[6] == ( char) SQLTRIPLED) ? \
(1) : \
(0) )
/**/
/*********************************************************************/
/* SETSQLDOUBLED(daptr, SQLDOUBLED) sets the 7th byte of sqldaid */
/* to '2'. */
/* SETSQLDOUBLED(daptr, SQLSINGLED) sets the 7th byte of sqldaid */
/* to be a ' '. */
/*********************************************************************/
#define SETSQLDOUBLED(daptr, newvalue) \
(((daptr)->sqldaid[6] = (newvalue)))
/**/
/*********************************************************************/
/* SETSQLTRIPLED(daptr) sets the 7th byte of sqldaid */
/* to '3'. */
/*********************************************************************/
#define SETSQLTRIPLED(daptr) \
(((daptr)->sqldaid[6] = (SQLTRIPLED)))
/**/
/*********************************************************************/
/* GETSQLDALONGLEN(daptr,n) returns the data length of the nth */
/* entry in the sqlda pointed to by daptr. Use this only if the */
/* sqlda was doubled or tripled and the nth SQLVAR entry has a */
/* LOB datatype. */
/*********************************************************************/
#define GETSQLDALONGLEN(daptr,n) ( \
(long) (((struct sqlvar2 *) &((daptr);->sqlvar[(n) + \
((daptr)->sqld)])) \
->len.sqllonglen))
/**//*********************************************************************/
/* SETSQLDALONGLEN(daptr,n,len) sets the sqllonglen field of the */
/* sqlda pointed to by daptr to len for the nth entry. Use this only */
/* if the sqlda was doubled or tripled and the nth SQLVAR entry has */
/* a LOB datatype. */
/*********************************************************************/
#define SETSQLDALONGLEN(daptr,n,length) { \
struct sqlvar2 *var2ptr; \
var2ptr = (struct sqlvar2 *) \
&((daptr);->sqlvar[(n) + ((daptr)->sqld)]); \
var2ptr->len.sqllonglen = (long ) (length); \
}
/**/
/*********************************************************************/
/* GETSQLDALENPTR(daptr,n) returns a pointer to the data length for */
/* the nth entry in the sqlda pointed to by daptr. Unlike the inline */
/* value (union sql8bytelen len), which is 8 bytes, the sqldatalen */
/* pointer field returns a pointer to a long (4 byte) integer. */
/* If the SQLDATALEN pointer is zero, a NULL pointer is be returned. */
/* */
/* NOTE: Use this only if the sqlda has been doubled or tripled. */
/*********************************************************************/
#define GETSQLDALENPTR(daptr,n) ( \
(((struct sqlvar2 *) &(daptr);->sqlvar[(n) + (daptr)->sqld]) \
->sqldatalen == NULL) ? \
((long *) NULL ) : \
((long *) ((struct sqlvar2 *) \
&(daptr);->sqlvar[(n) + (daptr)->sqld]) \
->sqldatalen ) )
/**/
/*********************************************************************/
/* SETSQLDALENPTR(daptr,n,ptr) sets a pointer to the data length for */
/* the nth entry in the sqlda pointed to by daptr. */
/* Use this only if the sqlda has been doubled or tripled. */
/*********************************************************************/
#define SETSQLDALENPTR(daptr,n,ptr) { \
struct sqlvar2 *var2ptr; \
var2ptr = (struct sqlvar2 *) \
&((daptr);->sqlvar[(n) + ((daptr)->sqld)]); \
var2ptr->sqldatalen = (char *) ptr; \
}
/**/
#define SQLDASIZE(n) \
( sizeof(struct sqlda) + ((n)-1) * sizeof(struct sqlvar) )
#endif /* SQLDASIZE */COBOL (IBM® COBOL only):
01 SQLDA.
05 SQLDAID PIC X(8).
05 SQLDABC PIC S9(9) BINARY.
05 SQLN PIC S9(4) BINARY.
05 SQLD PIC S9(4) BINARY.
05 SQLVAR OCCURS 0 TO 750 TIMES DEPENDING ON SQLN.
10 SQLVAR1.
15 SQLTYPE PIC S9(4) BINARY.
15 SQLLEN PIC S9(4) BINARY.
15 FILLER REDEFINES SQLLEN.
20 SQLPRECISION PIC X.
20 SQLSCALE PIC X.
15 SQLDATA POINTER.
15 SQLIND POINTER.
15 SQLNAME.
49 SQLNAMEL PIC S9(4) BINARY.
49 SQLNAMEC PIC X(30).
10 SQLVAR2 REDEFINES SQLVAR1.
15 SQLVAR2-RESERVED-1 PIC S9(9) BINARY.
15 SQLLONGLEN REDEFINES SQLVAR2-RESERVED-1
PIC S9(9) BINARY.
15 SQLVAR2-RESERVED-2 PIC S9(9) BINARY.
15 SQLDATALEN POINTER.
15 SQLDATATYPE-NAME.
20 SQLDATATYPE-NAMEL PIC S9(4) BINARY.
20 SQLDATATYPE-NAMEC PIC X(30).PL/I:
DECLARE
1 SQLDA BASED(SQLDAPTR),
2 SQLDAID CHAR(8),
2 SQLDABC FIXED(31) BINARY,
2 SQLN FIXED(15) BINARY,
2 SQLD FIXED(15) BINARY,
2 SQLVAR(SQLSIZE REFER(SQLN)),
3 SQLTYPE FIXED(15) BINARY,
3 SQLLEN FIXED(15) BINARY,
3 SQLDATA POINTER,
3 SQLIND POINTER,
3 SQLNAME CHAR(30) VAR;
/* */
DECLARE
1 SQLDA2 BASED(SQLDAPTR),
2 SQLDAID2 CHAR(8),
2 SQLDABC2 FIXED(31) BINARY,
2 SQLN2 FIXED(15) BINARY,
2 SQLD2 FIXED(15) BINARY,
2 SQLVAR2(SQLSIZE REFER(SQLN2)),
3 SQLBIGLEN,
4 SQLLONGL FIXED(31) BINARY,
4 SQLRSVDL FIXED(31) BINARY,
3 SQLDATAL POINTER,
3 SQLTNAME CHAR(30) VAR;
/* */
DECLARE SQLSIZE FIXED(15) BINARY;
DECLARE SQLDAPTR POINTER;
DECLARE SQLTRIPLED CHAR(1) INITIAL('3');
DECLARE SQLDOUBLED CHAR(1) INITIAL('2');
DECLARE SQLSINGLED CHAR(1) INITIAL(' ');