PL/SQLな日々
COBOL ではよく PAC形式なる内部10進数のデータを扱うらしい。
Windows等一般的な OS は1バイト(=8ビット)で1桁の数値を表現するのに対し、
ホストでは4ビットで1桁の数値を表現する。
たとえば
外部10進数(文字列10進数) | 内部10進数 |
---|---|
-123 | 0001 0010 0011 1101 |
-1234 | 0000 0001 0010 0011 0100 1100 |
データの取り扱いはバイト単位なので、偶数桁のばやいは先頭に 0000 がつく。
へー
で、Oracle のデータをホストに持ってきたい香具師はコレを PL/SQL で実装するのか??
ざっと調べた限り不可能。
そもそも NUMBER型のデータを 2進法に変換する関数なんて用意されてないし、
Oracle も内部で Decimal 型としてデータを格納してるっぽいけど内部データ型のまま出力する方法なんて無いし…
聞く限りでは「そういうソフトを使うベシ」とのことでした。
4桁のパック形式なら、4 × 2 -1 桁の数字 + 符号 の8桁になるから、
- 1 なら -0000001 みたいに置き換えて、そういうソフトに取り込んでしまうんだと。
へー