通貨値にカスタム書式を設定するには、結果列の精度とスケールを強制する必要があります(すべてのNUMBER(*、2)が通貨値であると想定しています)。次のクエリについて考えてみます。
select cast(1234.56 as NUMBER(6,2)) from dual;
必要に応じて期待される丸めを実行しますが、結果のメタデータは、指定されていない精度とスケールで数値フィールドを記述します。
System.out.println( rs.getMetaData().getScale(1) ); // prints 0;
次のスクリプトは期待どおりにNUMBER(6,2)を返すため、JDBC側で何か奇妙なことが起こっていると思います。
drop table temp;
create table temp as (
select cast(1234.56 as NUMBER(6,2)) x from dual
);
select * from temp;