SQL Programming Manual for TAL
Dynamic NonStop SQL Operations
HP NonStop SQL Programming Manual for TAL—527887-001
7-22
Dynamically Allocating Memory
Figure 7-3. Allocating Memory for Values (page 1 of 2)
VST0703.vsd
INT PROC setupvarbuffers (sqlda^ptr);
STRUCT .EXT sqlda^ptr (sqlda^type);
BEGIN
INT i;
INT mem^reqd;
FOR i := 0 TO sqlda^ptr.num^entries-1 DO
BEGIN
-- Determine the amount of memory needed by this entry's
-- data type. Note that for binary and decimal numeric
-- items, the byte length is extracted from bits 8 - 15.
-- The upper 8 bits store the scale of the item.
CASE sqlda.sqlvar[i].data^type OF
BEGIN
_SQLDT_ASCII_F, - - CHAR
_SQLDT_ASCII_F_UP ->
mem_reqd := sqlda.sqlvar[i].data_len;
_SQLDT_ASCII_V, - - VARCHAR
_SQLDT_ASCII_V_UP ->
mem_reqd := sqlda.sqlvar[i].data_len + 2;
_SQLDT_16BIT_S, - - SMALLINT
_SQLDT_16BIT_U, - - SMALLINT UNSIGNED
_SQLDT_32BIT_S, - - INTEGER
_SQLDT_32BIT_U, - - INTEGER UNSIGNED
_SQLDT_64BIT_S, - - LARGEINT
_SQLDT_REAL, - - REAL
_SQLDT_DOUBLE -> - - DOUBLE PRECISION
mem_reqd := sqlda.sqlvar[i].data_len.<8:15>;
_SQLDT_DEC_U, - - DECIMAL UNSIGNED
_SQLDT_DEC_LSS, - - DECIMAL LSS
_SQLDT_DEC_LSE, - - DECIMAL LSE
_SQLDT_DEC_TSS, - - DECIMAL TSS
_SQLDT_DEC_TSE -> - - DECIMAL TSE
mem_reqd := sqlda.sqlvar[i].data_len.<8:15>;
_SQLDT_DATETIME, - - DATETIME
-- Other DATETIME data types except DAY TO FRACTION
_SQLDT_INT_D_F -> - - DAY TO FRACTION
mem^reqd := sqlda.sqlvar[i].data^len.<8:15>;
OTHERWISE ->
-- Print "Data type not supported" message and
-- display sqlda.sqlvar[i].data^len
END; -end of case