AS400/IBMi 物理ファイルとテーブル INTEGER系で違和感

IT関連

SQLを使って物理ファイルではなくテーブルとしてファイルを作る。

 

その中でINT系で違和感があったので試した実験。

INT系なら何でもいいと思うが、今回はSMALLINTでカラムを作り、ここにSQLを使ってINSERT INTO してみる。

 

IBMのマニュアルを見る限りSMALLINTに入る値は-32768~+32767の間と決まっているがはたして・・。

  • 32767 → 入る
  • 32768 → エラー
  • -32768 → 入る

やはり値の制限は伊達ではないみたい。

SQLのSELECT文でファイルの中を見てもちゃんと表示されている。

 

しかし、SMALLINTを指定した場合、作られるカラムの桁数は4で、バイト数は2です。

AS400のQRY/400でみたところもLEN(4)のDEC(0)になっています。

でも5桁の数字が入るんですよね。

これはどういうことなのでしょう。

 

でもこれをQRY/400で確認してみると******表示されます。

UPDDTAで入力しようとしても4桁しか入りません。

恐らくSMALLINTは桁数を4しか保持しないから。

 

UPDDTAで3276と4桁だけ入力すると、QRY/400の表示は3,276とカンマ区切りになる。

 

ゆえにデータベースとしては-32768~+32767の枠は確保しているけど、AS400/IBMiのクライアントアクセスやACSでは認識しないし、操作もうまくいかないことがあるみたい。

そのファイルはWebやSQL限定で使うのならよさそうだけど、AS400と共用する場合は注意したほうが良さそう。

 

ちなみに数字、整数のなかでは

  • SMALLINT -32768から+32767
  • INTEGER -2147483648から+2147483647(20億)
  • BITINT -9223372036854775808 から +9223372036854775807

こうなる。

INT系は桁数指定できないみたいなので使い勝手はどうなのかな。

しかもフィールド属性はBだし。

DECで作るとPACになるので、整数もDECで作ったほうが無難っぽいけどマニュアルではダメと書いてありました。

うーん、謎は深まるばかり。

コメント

タイトルとURLをコピーしました