接任务,赚取用不完的金币中国教程网
《Photoshop专家讲堂》光盘热售
参与论坛活动,快速赚取金币精品素材,中英文字体
发新话题
打印

SQL:怎么样使用连字符和逗号来改变列值?

SQL:怎么样使用连字符和逗号来改变列值?


 问:将所有数据导入表的时候如何解码?例如,我有一个.CSV 文件,有两个列,例如:

                Name Address   

                selva addr1-addr2-addr3   

                joy asd1-asd2-asd3   

        当我使用SQL loader 来加载数据到表的时候,我需要一个CTL 文件。我怎么才能将这个日期解码为连字符或者逗号分割的列值呢?

  答:控制文件中的INSERT, APPEND, REPLACE, TRUNCATE 对应数据库中的指令:

  1、 在一个已经空的表中插入行;当表非空的时候,这个操作失败。

  2、 在非空表中插入行。

  3、 替换或者截断表中的行,并且在数据文件或者控制文件中插入数据。数据可以作为控制文件的一部分通过语句BEGINDATA 来优先插入。

  为了反便你用连字符来替换表中行的逗号,你需要创建一个插入之前的触发器,如下所示:

  表称为TEST,具有如下的描述:

  NAME VARCHAR2(100)

  ADDRESS VARCHAR2(200)

  触发器内容如下,可以帮助你达到目标:

  CREATE OR REPLACE TRIGGER REPLACE_DASHES_WITH_COLUMN

  BEFORE INSERT ON TEST

  FOR EACH ROW

  BEGIN

  :NEW.ADDRESS := REPLACE(:NEW.ADDRESS,'-', ',');


  END;

  /

  控制文件(test.ctl) 列表如下:

  LOAD DATA

  INFILE *

  INTO TABLE TEST

  REPLACE

  FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'

  (NAME, ADDRESS)

  BEGINDATA

  Sonali Bendre, c/o Azim Fahmi-Somewhere outthere-Bollywood

  Preity Zinta, "c/o Azim Fahmi-In your dreams-None of your business"

  "George Bush", 1600 Pennsylvania Avenue-Whitehouse-Washington D.C.

  Tony Blair, 10 Downing Street-London-UK-POSTALCODE HERE

  Telaram Thakur, 10 Shabzi Mandi-Jackson Heights-New York


  如果你在命令行中输入一下的命令:

  sqlldr USERID=/{@db_name} control=test.ctl log=test.log bad=test.bad


  where @db_name is optional

  短横线就可以被逗号替代因为在用户触发之前就被编译了。

TOP

发新话题 返回列表