ITPub博客

首页 > 数据库 > Oracle > 让oracle帮你理财

让oracle帮你理财

原创 Oracle 作者:幕南风 时间:2014-07-03 13:32:32 0 删除 编辑

          本案例以建设银行为例
          请将建行的交易明细表载下,并命名为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
                        都是为了方便我们理财、让我们的生活更厚重和精彩


         

<!-- Baidu Button BEGIN -->

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26515977/viewspace-1207848/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 不安装oracle、3分钟直接用pl/sql连接oracle server
下一篇: 理解ASM(四)条带化原理和rebalance
请登录后发表评论 登录
全部评论
腾讯数据库工程师

注册时间:2012-05-10

最新文章