Bei numerischen Werten muss als Länge, hier %size(Daten), in der Form "AnzStellen * 256 + AnzNk" angegeben werden.

SQL_NUMERIC ist Zoned:

d MyVar s 11 2

SQLGetData (ptr_StatementHandle:
idx:SQL_NUMERIC:
%addr(MyVar):11 * 256 + 2:
%addr(WertLen))

SQL_DECIMAL ist Packed:

d MyVar s p 11 2

SQLGetData (ptr_StatementHandle:
idx:SQL_DECIMAL:
%addr(MyVar):11 * 256 + 2:
%addr(WertLen))

Analog ist mit anderen Feldformaten umzugehen.

PS:
Der schnellere (performantere) Weg ist SQLBindCol, da dieser Aufruf nur 1 Mal nach dem SQLPrepare erforderlich ist und nach einem SQLFetch die Daten sofort zur Verfügung steht.
http://publib.boulder.ibm.com/iserie...rzadpmst37.htm