【问题标题】:Loading a CSV File into Oracle Table将 CSV 文件加载到 Oracle 表中
【发布时间】:2010-11-22 05:17:48
【问题描述】:

我正在使用 Oracle ApEx,我想知道将单列 csv 文件上传到 Oracle 表中以在 ApEx 中使用的最佳方式是什么?

谢谢。

【问题讨论】:

标签: plsql oracle10g oracle-apex


【解决方案1】:

我和你有同样的问题。 您可能已经找到了解决方案,但我遵循此链接中的方法 http://forums.oracle.com/forums/thread.jspa?threadID=545565 它对我有用。他们使用外部表。最大列数为 50。

其他选项是http://avdeo.com/2008/05/21/uploading-excel-sheet-using-oracle-application-express-apex/ 但是,我发现如果您的 CSV 包含一些特殊字符,它就无法正常运行。

希望这能有所帮助。

【讨论】:

    【解决方案2】:

    要使用 SQLLOADER 加载 CSV 文件,您需要执行以下操作:

    (a) CSV 文件 (b) SQLLOADER 控制文件(也称为 CTL 文件) (c) SQLLOADER 命令使用 (b) 中的 CTL 文件加载 (a) 中的 CSV 文件。

    CSV 文件,你已经有了。对于这个例子,文件名为 temp.csv 包含两列

    A,100
    B,200
    C,300
    D,400
    

    现在,您需要创建一个控件来描述文件以及将其加载到哪个表以及如何加载它。对于此示例,名为 temp.ctl 的控制文件名称和要加载到的表是 TEMP_TABLE,其中包含两列,COLUMN_1 是 VARCHAR2(2),COLUMN_2 是 NUMBER。 temp.ctl 如下所示

    LOAD DATA
    APPEND
    INTO TEMP_TABLE
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
    TRAILING NULLCOLS
    (
      COLUMN_1 CHAR,
      COLUMN_2 Integer EXTERNAL
    )
    

    【讨论】:

    • 感谢 Mohamed 的帮助,但不想使用 SQL*Loader - 请参阅我上面的评论。
    • @Mohamed 我肯定需要你在 SQL*Loader 中的帮助才能将 csv 文件加载到 oracle db 中
    【解决方案3】:

    大文件:

    • sqlloader
    • 外部表

    小文件:

    • 自己解析

    【讨论】:

    • 谢谢,但不考虑使用 SQL*Loader,因为这将由最终用户完成,因此希望允许他们从 Oracle ApEx 中选择文件,从他们的 PC 上传,然后解析,然后加载到表中。将单列 csv 解析为 oracle 表的最佳方法是什么?谢谢。
    【解决方案4】:

    你可以用 awk 做到这一点。

    这里是关于如何从 .csv 数据填充表格的示例。

    SQL> create table MY_TABLE(a varchar2(100), b varchar2(100));
    
    [oracle@myora ~]$ tail Some_Input_CSV_file
    Some Data A 1,Some Data B 1
    Some Data A 2,Some Data B 2
    Some Data A 3,Some Data B 3
    Some Data A 4,Some Data B 4
    Some Data A 5,Some Data B 5
    Some Data A 6,Some Data B 6
    Some Data A 7,Some Data B 7
    Some Data A 8,Some Data B 8
    Some Data A 9,Some Data B 9
    Some Data A 10,Some Data B 10
    [oracle@myora ~]$
    
    [oracle@myora ~]$ cat Some_Input_CSV_file | awk -F, ‘ { printf(“insert into MY_TABLE values(trim(\x27%s\x27), trim(\x27%s\x27));\n”, $1, $2); } ‘ > RunMe.sql
    
    [oracle@myora ~]$ tail RunMe.sql
    insert into MY_TABLE values(trim(‘Some Data A 1′), trim(‘Some Data B 1′));
    insert into MY_TABLE values(trim(‘Some Data A 2′), trim(‘Some Data B 2′));
    insert into MY_TABLE values(trim(‘Some Data A 3′), trim(‘Some Data B 3′));
    insert into MY_TABLE values(trim(‘Some Data A 4′), trim(‘Some Data B 4′));
    insert into MY_TABLE values(trim(‘Some Data A 5′), trim(‘Some Data B 5′));
    insert into MY_TABLE values(trim(‘Some Data A 6′), trim(‘Some Data B 6′));
    insert into MY_TABLE values(trim(‘Some Data A 7′), trim(‘Some Data B 7′));
    insert into MY_TABLE values(trim(‘Some Data A 8′), trim(‘Some Data B 8′));
    insert into MY_TABLE values(trim(‘Some Data A 9′), trim(‘Some Data B 9′));
    insert into MY_TABLE values(trim(‘Some Data A 10′), trim(‘Some Data B 10′));
    [oracle@myora ~]$
    
    [oracle@myora ~]$ sqlplus myuser/mypwd@myinst
    
    SQL> @RunMe.sql
    
    …
    
    1 row created.
    
    1 row created.
    
    1 row created.
    
    1 row created.
    
    1 row created.
    
    SQL> commit;
    
    Commit complete.
    
    SQL> exit
    

    【讨论】:

      猜你喜欢
      • 2017-12-07
      • 1970-01-01
      • 2016-06-04
      • 2017-02-26
      • 1970-01-01
      • 1970-01-01
      • 2019-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多