ネットで調べると、MySQLやPostgreSQLでの郵便番号DBの作成の記事は記載がありますが、
Oracle上でそういった記事は、あまり無かったりします。
というわけで作成してみます。
まずは郵便番号データを格納するテンポラリテーブルを作成します。
で、以下のDDLを流します。
コメントについては、不要だとおもったら消してください。
サイズについては、現時点での郵便番号データの長さを確認し、データが入る長さにしています。
無駄に長くなっていませんのでご安心ください。
CREATE TABLE ZIP_TMP
(
zip_code CHAR (7 BYTE) NOT NULL ,
zip_old CHAR (5 BYTE) NOT NULL ,
jiscode NUMBER (5) NOT NULL ,
pref_kana VARCHAR2 (10 CHAR) NOT NULL ,
city_kana VARCHAR2 (25 CHAR) NOT NULL ,
area_kana VARCHAR2 (75 CHAR) NOT NULL ,
pref_kan VARCHAR2 (4 CHAR) NOT NULL ,
city_kan VARCHAR2 (15 CHAR) NOT NULL ,
area_kan VARCHAR2 (40 CHAR) NOT NULL ,
flg1 NUMBER (1) NOT NULL ,
flg2 NUMBER (1) NOT NULL ,
flg3 NUMBER (1) NOT NULL ,
flg4 NUMBER (1) NOT NULL ,
flg5 NUMBER (1) NOT NULL ,
flg6 NUMBER (1) NOT NULL
) LOGGING
;
COMMENT ON TABLE ZIP_TMP IS '郵便番号'
;
COMMENT ON COLUMN ZIP_TMP.zip_code IS '郵便番号'
;
COMMENT ON COLUMN ZIP_TMP.zip_old IS '旧郵便番号'
;
COMMENT ON COLUMN ZIP_TMP.jiscode IS '全国地方公共団体コード'
;
COMMENT ON COLUMN ZIP_TMP.pref_kana IS '都道府県名(カナ)'
;
COMMENT ON COLUMN ZIP_TMP.city_kana IS '市区町村名(カナ)'
;
COMMENT ON COLUMN ZIP_TMP.area_kana IS '町域名(カナ)'
;
COMMENT ON COLUMN ZIP_TMP.pref_kan IS '都道府県名(漢字)'
;
COMMENT ON COLUMN ZIP_TMP.city_kan IS '市区町村名(漢字)'
;
COMMENT ON COLUMN ZIP_TMP.area_kan IS '町域名(漢字)'
;
COMMENT ON COLUMN ZIP_TMP.flg1 IS '一町域が二以上の郵便番号で表される場合の表示 (注3) (「1」は該当、「0」は該当せず)'
;
COMMENT ON COLUMN ZIP_TMP.flg2 IS '小字毎に番地が起番されている町域の表示 (注4) (「1」は該当、「0」は該当せず) '
;
COMMENT ON COLUMN ZIP_TMP.flg3 IS '丁目を有する町域の場合の表示 (「1」は該当、「0」は該当せず) '
;
COMMENT ON COLUMN ZIP_TMP.flg4 IS '一つの郵便番号で二以上の町域を表す場合の表示 (注5) (「1」は該当、「0」は該当せず)'
;
COMMENT ON COLUMN ZIP_TMP.flg5 IS '更新の表示(注6)(「0」は変更なし、「1」は変更あり、「2」廃止(廃止データのみ使用))'
;
COMMENT ON COLUMN ZIP_TMP.flg6 IS '変更理由 (「0」は変更なし、「1」市政・区政・町政・分区・政令指定都市施行、「2」住居表示の実施、「3」区画整理、「4」郵便区調整等、「5」訂正、「6」廃止(廃止データのみ使用))'
;
CREATE INDEX ix_ZIP_TMP_01 ON ZIP_TMP
(
zip_code ASC
)
NOLOGGING
NOCOMPRESS
NOPARALLEL
;
以下の制御ファイルを作成します。ちなみにLinuxOS上で動作させるための制御ファイルです。
試してはいませんが、
INFILE 'ken_all.csv' "STR '\r\n'" ↓ INFILE 'ken_all.csv'
にすれば、理論上、Windows上でも動作するはずです。
LOAD DATA CHARACTERSET JA16SJIS INFILE 'ken_all.csv' "STR '\r\n'" INSERT INTO TABLE ZIP_TMP FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' (JISCODE, ZIP_OLD, ZIP_CODE, PREF_KANA, CITY_KANA, AREA_KANA, PREF_KAN, CITY_KAN, AREA_KAN, FLG1, FLG2, FLG3, FLG4, FLG5, FLG6)
日本郵便から郵便番号CSVデータを以下のコマンドでダウンロードします。
wget http://www.post.japanpost.jp/zipcode/dl/kogaki/lzh/ken_all.lzh
日本郵便の郵便番号CSVファイルは、lzh形式なため、lhaをインストールします。
CentOSでは、日本でのデファクトスタンダード(もう過去の話?)であるLHA形式の圧縮ファイルの展開は、
標準ではできません。
以下のコマンドを投入し、ダウンロードとインストールをします。
wget http://packages.sw.be/lha/lha-1.14i-19.2.2.el5.rf.i386.rpm yum --nogpgcheck install lha-1.14i-19.2.2.el5.rf.i386.rpm lha e ken_all.lzh
以下のコマンドを投入し、DBにインポートします。
sqlldr userid=username/password control=zip.ctl
日本郵便が提供する郵便番号データが、Shift-JIS、改行コード:CR+LFなので
これを変換するために、CHARACTERSET JA16SJIS の記述と、
"STR '\r\n'"の記述を入れるのに気付かなかったことです。
以上です。