私が作成した Oracle テーブル MYTABLE には、列 COL1 があり、NUMBER(20,3); として宣言されています。小数点以下 3 桁まで有効です。このテーブルで cx_Oracle カーソルを実行すると、次のようになります。
cursor.execute('SELECT COL1 FROM MYTABLE')
cursor.description
>> [('COL1', <type 'cx_Oracle.NUMBER'>, 25, 22, 20, 3, 1)]
cursor.execute('SELECT SUM(COL1) FROM MYTABLE')
cursor.description
>> [('SUM(COL1)', <type 'cx_Oracle.NUMBER'>, 127, 22, 0, 0, 1)]
2 番目のケースでは、精度とスケールが失われています。データ自体は問題ありません (小数点以下の桁数で値が表示されます)。
どちらの場合も、期待されるデータ型を伝える信頼できる方法が必要です (クライアント UI などでデータをフォーマットする方法を決定できるようにするため)。 2 番目のケースでは許可されており、下流の UI ロジックは数値を整数としてレンダリングしますが、これは望ましくありません。
これはバグですか?もしそうなら、2番目のケースでカーソルからどのようなデータが期待できるかを明確に把握する方法はありますか?