1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

インボイス登録企業のデータをDb2 for i のテーブルに格納してみる 前編

Last updated at Posted at 2025-09-07

いまさらな記事が続いていますが(^^;ちょっとやってみようという事になり。

インボイスデータのダウンロード

インボイスに登録している企業のデータは下記からダウンロードが可能です。csv, xml, jsonがあります。

国税庁 インボイス制度 発行事業者公表サイト

ダウンロード・解凍するとこんな感じになります。
image.png
これをDb2 for i のテーブルにアップロードします。
※注釈:この記事は執筆開始してからしばらく寝かせていたため、画像は最新のデータでは無くなっています・・・(記事内容には支障ないと思います)

上記とは別にデータのカラム情報もダウンロードでき、こちらからカラム属性が分かります。
リソース定義書
image.png

項番1-6はヘッダー情報相当で、項番7以降が上記でダウンロードしたcsv/xml/jsonデータのカラムに対応します。

Db2 for i のテーブルを作成する

Db2 for i のテーブルを作成します。
インボイスデータのエクセルを開いてデータの桁数やタイプを確認します。
image.png

たとえば、registrationDate(登録日)日付データはデフォルトでは下記のようなセパレーターを含む10桁 YYYY/MM/DD のデータです。
image.png

XLSXファイルの形式は・
image.png

今回はYY/MM/DDでDb2 for i に格納してみます。

Db2 for i でDDLを作成する

AI君でできそうですが検証してないので、手作業でカラム定義してみます。
色々やり方はありますが、今回はACSを使用します。
ACS → スキーマから下記のウィンドウを開いて、任意のライブラリー(スキーマ)に表を作成します。
今回は、
ライブラリー(スキーマ):INVOICE_LIB
テーブル名:INVOICE
とします。

ACSで 表を選択し、右クリックから新規→表 を選択します。
image.png

表名に INVOICE を入力
image.png

カラム のタブに移動して、一つずつカラムを追加していきます。
リソース定義書の項番7 一連番号 sequenceNumber 以降をカラム追加すればいいと思います。

たとえば、項番7 一連番号 sequenceNumber はダウンロードしたエクセル上では数値、となっていますので、数値属性のDb2 for i のカラムタイプ(データ・タイプ)を指定します。
一連番号で整数値しか取らないのでここではINTEGERとしてみます。(この辺は色々できると思うので個々の環境で最適な設定としてください。)
ヌル可能のチェックも今回は外します。(このカラムがヌルは基本的に無いと思うので)

image.png

追加ボタンを押して、2つ目以降のカラムも追加していきます。

完成して作成したカラム一覧がこちら。
image.png

すでにテーブルの作成ボタンを押した後で、カラム名が10桁以上のカラムはシステム名として短いカラム名が別に作成されています。(IBM i の5250 DSPFFDコマンド等で見るとカラム名はこちらが表示され、1列名のカラム名は代替名、として表示されます
image.png

で、ここで、項番7 一連番号 sequenceNumber を漏らしていたことが発覚し・・再度作成します、

既存テーブルからDDLを生成する

これもACSのメニューからテーブルを右クリックしてDDLの生成を実行するだけです。
image.png

生成したDDLをSQLスクリプト実行画面で開く、を指定してDDL作成すると下記のようにDDLが表示されるので、抜けていたsequenceNumberを追加します。

SEQUENCENUMBER FOR COLUMN REGIS0000A INTEGER NOT NULL ,

を追加しました。

image.png
※この画像には誤りがありまして、INTEGERは桁数していないので、正しくは REGIS0000A INTEGER NOT NULLのようになります。(後ほど画像修正します。)

このテーブルを作成します。
SQLスクリプト実行からDDLを流します。
image.png

今回はカラムのラベルも2つだけ、追加してみました。
流したSQL DDL (ACSで生成したDDL)を貼っておきます。

--  SQLの生成 
--  バージョン:                   	V7R6M0 250418 
--  生成:              	25/09/08 08:06:29 
--  リレーショナル・データベース:       	C70ADE21 
--  規格オプション:          	Db2 for i 
CREATE TABLE INVOICE_LIB.INVOICE ( 
            SEQUENCENUMBER FOR COLUMN REGIS0000A INTEGER NOT NULL ,
	REGISTRATEDNUMBER FOR COLUMN REGIS00001 NUMERIC(14, 0) NOT NULL , 
	PROCESS CHAR(2) CCSID 5123 NOT NULL , 
	CORRECT CHAR(1) CCSID 5123 NOT NULL , 
	KIND CHAR(1) CCSID 5123 NOT NULL , 
	COUNTRY CHAR(1) CCSID 5123 NOT NULL , 
	LATEST CHAR(1) CCSID 5123 NOT NULL , 
	REGISTRATIONDATE FOR COLUMN REGIS00002 DATE NOT NULL , 
	UPDATEDATE DATE NOT NULL , 
	DISPOSALDATE FOR COLUMN DISPO00001 DATE NOT NULL , 
	EXPIREDATE DATE NOT NULL , 
	ADDRESS VARCHAR(100) ALLOCATE(40) CCSID 1399 NOT NULL , 
	ADDRESSPREFECTURECODE FOR COLUMN ADDRE00001 CHAR(1) CCSID 5123 NOT NULL , 
	ADDRESSCITYCODE FOR COLUMN ADDRE00002 CHAR(3) CCSID 5123 NOT NULL , 
	KANA VARCHAR(100) ALLOCATE(40) CCSID 1399 NOT NULL , 
	NAME VARCHAR(100) ALLOCATE(40) CCSID 1399 NOT NULL , 
	ADDRESSINSIDE FOR COLUMN ADDRE00003 VARCHAR(100) ALLOCATE(40) CCSID 1399 NOT NULL , 
	ADDRESSINSIDEPREFECTURECODE FOR COLUMN ADDRE00004 CHAR(2) CCSID 5123 NOT NULL , 
	ADDRESSINSIDECITYCODE FOR COLUMN ADDRE00005 CHAR(3) CCSID 5123 NOT NULL , 
	TRADENAME VARCHAR(100) ALLOCATE(40) CCSID 1399 NOT NULL , 
	POPULARNAME_PREVIOUSNAME FOR COLUMN POPUL00001 VARCHAR(100) ALLOCATE(40) CCSID 1399 NOT NULL )   
	  
	RCDFMT INVOICE    ; 
  
LABEL ON TABLE INVOICE_LIB.INVOICE 
	IS 'INVOICEデータ' ; 
  
LABEL ON COLUMN INVOICE_LIB.INVOICE 
( REGISTRATEDNUMBER IS 'INVOICE_企業番号   ' ) ; 
  
GRANT ALTER , DELETE , INDEX , INSERT , REFERENCES , SELECT , UPDATE   
ON INVOICE_LIB.INVOICE TO GOMA WITH GRANT OPTION ; 
  

※ 上記のDDLにはカラムタイプのエラーが含まれています。修正はこちらの記事で

力尽きました・・(続く

1
0
7

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?