Por cierto, al final lo he hecho así, por si a alguien le sirve:
SELECT DECODE(SUBSTR(TRIM(TRANSLATE(TRIM(<campo talla>), '01234567890', '**********')), 1, 1), '', ' ', '*', TRIM(TO_CHAR(<campo talla>, '000')), LPAD(<campo talla>, 3)) FROM DUAL;
porque al final el campo talla no se sabe si va a ser numérico (038, 38,...) o alfabético (XL, bXL, L,... siendo b blanco).
Gracias por vuestra colaboración.
Salu2.