The sqldata field
To hold the column data, the client application must allocate a buffer and set sqldata to point to this buffer. If your client application might perform code-set conversion, it must allocate sufficient storage to handle the increase in the size of the column data that might occur.
When the DESCRIBE ... INTO statement sets the sqllen field, the sqllen value indicates the length of the column data in the database code set. Therefore, if you use the value of sqllen that the DESCRIBE ... INTO statement retrieves, you might not allocate a buffer that is sufficiently large for the data values when they are in the client code set.
EXEC SQL include sqlda;
...
struct sqlda *q_desc;
...
EXEC SQL describe sqlstmt_id into q_desc;
...
q_desc->sqlvar[0].sqldata =
(char *)malloc(q_desc->sqlvar[0].sqllen);
EXEC SQL include sqlda;
EXEC SQL define BUFSIZE_FACT 4;
...
struct sqlda *q_desc;
...
q_desc->sqlvar[0].sqllen =
q_desc->sqlvar[0].sqllen * BUFSIZE_FACT + 1;
q_desc->sqlvar[0].sqldata =
(char *)malloc(q_desc->sqlvar[0].sqllen);
A
buffer-size factor (BUFSIZE_FACT) of 4
is suggested
because a multibyte character has a maximum size of 4 bytes.