ねもぷらす

ふぁいんでぃんぐねもの日記。プログラミングとか育児とか

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 みたいに置き換えて、そういうソフトに取り込んでしまうんだと。

へー