本案例以建设银行为例
请将建行的交易明细表载下,并命名为ccb.txt
此时,你有两种选择:sqlldr or external table
㈠ sqlldr
因为网银只有在win上才能用,所以如果你的os是linux/unix,那么在ctl中必须指定字符集
让UTF-8可以显示GB18030
① 建表
create table t_bank_invoice
( account_number number,
sub_number number,
transac_date date,
transac_address varchar2(600),
transac_comment varchar2(600),
currency varchar2(100),
remit varchar2(100),
in_amount number(20,2),
out_amount number(20,2),
balance number(20,2),
opposite_number number,
opposite_username varchar2(100),
all_comment varchar2(2000));
② 用sqlldr
[oracle@localhost ~]$ sqlldr hr/hr control=ccb.ctl
ccb.ctl如下:
[oracle@localhost ~]$ sqlldr hr/hr control=ccb.ctl
ccb.ctl如下:
LOAD DATA
characterset ZHS16GBK
INFILE 'ccb.txt'
DISCARDFILE 'ccb.dis'
append
INTO table t_bank_invoice
TRAILING NULLCOLS
(
account_number "11111111111",
sub_number "00000",
transac_date position(1:8) DATE(8) "YYYYMMDD" TERMINATED BY ',',
transac_address position(10) char TERMINATED BY ',',
out_amount decimal external TERMINATED BY ',' nullif out_amount=blanks,
in_amount decimal external TERMINATED BY ',' nullif in_amount=blanks ,
balance decimal external TERMINATED BY ',' nullif balance=blanks,
opposite_number char TERMINATED BY ',',
opposite_username char TERMINATED BY ',',
currency char TERMINATED BY ',',
transac_comment char TERMINATED BY whitespace
)
③ 查询表
当然、你可以在all_comment列个性化设置你的具体消费开支,比如,交电话费多少钱、买衣服多少钱等等
㈡ external table
① 创建directory对象
sys@ORCL> create directory dir as '/home/oracle/';
Directory created.
sys@ORCL> grant read,write on directory dir to public;
Grant succeeded.
② 把ccb.txt放在dir下
③ 用sqlldr生成外部表的创建语句,并编辑ccb.log
编辑如下:
CREATE TABLE T_BANK_INVOICE
(
"ACCOUNT_NUMBER" VARCHAR(255),
"SUB_NUMBER" VARCHAR(255),
"TRANSAC_DATE" DATE,
"TRANSAC_ADDRESS" VARCHAR2(600),
"OUT_AMOUNT" NUMBER(20,2),
"IN_AMOUNT" NUMBER(20,2),
"BALANCE" NUMBER(20,2),
"OPPOSITE_NUMBER" NUMBER,
"OPPOSITE_USERNAME" VARCHAR2(100),
"CURRENCY" VARCHAR2(100),
"TRANSAC_COMMENT" VARCHAR2(600)
)
ORGANIZATION external
(
TYPE oracle_loader
DEFAULT DIRECTORY dir
ACCESS PARAMETERS
(
RECORDS DELIMITED BY NEWLINE CHARACTERSET ZHS16GBK
BADFILE 'ccb1.bad'
DISCARDFILE 'ccb1.dis'
LOGFILE 'ccb.log_xt'
READSIZE 1048576
FIELDS LDRTRIM
MISSING FIELD VALUES ARE NULL
REJECT ROWS WITH ALL NULL FIELDS
(
"ACCOUNT_NUMBER" CHAR(1),
"SUB_NUMBER" CHAR(1),
"TRANSAC_DATE" (1:8) CHAR(8)
DATE_FORMAT DATE MASK "YYYYMMDD",
"TRANSAC_ADDRESS" (10) CHAR(255)
TERMINATED BY ",",
"OUT_AMOUNT" CHAR(255)
TERMINATED BY ","
NULLIF ("OUT_AMOUNT" = BLANKS),
"IN_AMOUNT" CHAR(255)
TERMINATED BY ","
NULLIF ("IN_AMOUNT" = BLANKS),
"BALANCE" CHAR(255)
TERMINATED BY ","
NULLIF ("BALANCE" = BLANKS),
"OPPOSITE_NUMBER" CHAR(255)
TERMINATED BY ",",
"OPPOSITE_USERNAME" CHAR(255)
TERMINATED BY ",",
"CURRENCY" CHAR(255)
TERMINATED BY ",",
"TRANSAC_COMMENT" CHAR(255)
TERMINATED BY WHITESPACE
)
)
location
(
'ccb.txt'
)
)REJECT LIMIT UNLIMITED;
④
[oracle@localhost ~]$ cp ccb.log ccb.sql
⑤
hr@ORCL> @ccb.sql
Table created.
⑥ 查询表
小结:如果您的存款惊人、或者经常存取,明细比较大、外部表是个不错的选择
但不论是sqlldr还是external table
都是为了方便我们理财、让我们的生活更厚重和精彩