* int Unfortunately we need to do double work here to compute
                 * the size of the space needed for the numeric structure.
                 */
-               ecpg_sqlda_align_add_size(offset, sizeof(int), sizeof(numeric), &offset, &next_offset);
+               ecpg_sqlda_align_add_size(offset, sizeof(NumericDigit *), sizeof(numeric), &offset, &next_offset);
                if (!PQgetisnull(res, row, i))
                {
                    char       *val = PQgetvalue(res, row, i);
                    num = PGTYPESnumeric_from_asc(val, NULL);
                    if (!num)
                        break;
-                   ecpg_sqlda_align_add_size(next_offset, sizeof(int), num->ndigits + 1, &offset, &next_offset);
+                   if (num->ndigits)
+                       ecpg_sqlda_align_add_size(next_offset, sizeof(int), num->ndigits + 1, &offset, &next_offset);
                    PGTYPESnumeric_free(num);
                }
                break;
 
                    set_data = false;
 
-                   ecpg_sqlda_align_add_size(offset, sizeof(int), sizeof(numeric), &offset, &next_offset);
+                   ecpg_sqlda_align_add_size(offset, sizeof(NumericDigit *), sizeof(numeric), &offset, &next_offset);
                    sqlda->sqlvar[i].sqldata = (char *) sqlda + offset;
                    sqlda->sqlvar[i].sqllen = sizeof(numeric);
 
 
                    memcpy(sqlda->sqlvar[i].sqldata, num, sizeof(numeric));
 
-                   ecpg_sqlda_align_add_size(next_offset, sizeof(int), num->ndigits + 1, &offset, &next_offset);
-                   memcpy((char *) sqlda + offset, num->buf, num->ndigits + 1);
+                   if (num->ndigits)
+                   {
+                       ecpg_sqlda_align_add_size(next_offset, sizeof(int), num->ndigits + 1, &offset, &next_offset);
+                       memcpy((char *) sqlda + offset, num->buf, num->ndigits + 1);
 
-                   ((numeric *) sqlda->sqlvar[i].sqldata)->buf = (NumericDigit *) sqlda + offset;
-                   ((numeric *) sqlda->sqlvar[i].sqldata)->digits = (NumericDigit *) sqlda + offset + (num->digits - num->buf);
+                       ((numeric *) sqlda->sqlvar[i].sqldata)->buf = (NumericDigit *) sqlda + offset;
+                       ((numeric *) sqlda->sqlvar[i].sqldata)->digits = (NumericDigit *) sqlda + offset + (num->digits - num->buf);
+                   }
 
                    PGTYPESnumeric_free(num);
 
 
                    set_data = false;
 
-                   ecpg_sqlda_align_add_size(offset, sizeof(int), sizeof(numeric), &offset, &next_offset);
+                   ecpg_sqlda_align_add_size(offset, sizeof(NumericDigit *), sizeof(numeric), &offset, &next_offset);
                    sqlda->sqlvar[i].sqldata = (char *) sqlda + offset;
                    sqlda->sqlvar[i].sqllen = sizeof(numeric);
 
 
                    memcpy(sqlda->sqlvar[i].sqldata, num, sizeof(numeric));
 
-                   ecpg_sqlda_align_add_size(next_offset, sizeof(int), num->ndigits + 1, &offset, &next_offset);
-                   memcpy((char *) sqlda + offset, num->buf, num->ndigits + 1);
+                   if (num->ndigits)
+                   {
+                       ecpg_sqlda_align_add_size(next_offset, sizeof(int), num->ndigits + 1, &offset, &next_offset);
+                       memcpy((char *) sqlda + offset, num->buf, num->ndigits + 1);
 
-                   ((numeric *) sqlda->sqlvar[i].sqldata)->buf = (NumericDigit *) sqlda + offset;
-                   ((numeric *) sqlda->sqlvar[i].sqldata)->digits = (NumericDigit *) sqlda + offset + (num->digits - num->buf);
+                       ((numeric *) sqlda->sqlvar[i].sqldata)->buf = (NumericDigit *) sqlda + offset;
+                       ((numeric *) sqlda->sqlvar[i].sqldata)->digits = (NumericDigit *) sqlda + offset + (num->digits - num->buf);
+                   }
 
                    PGTYPESnumeric_free(num);