【问题标题】:How to copy the data from Excel to oracle? [duplicate]如何将数据从Excel复制到oracle? [复制]
【发布时间】:2009-03-21 04:22:23
【问题描述】:

如何将数据从Excel复制到oracle?

【问题讨论】:

    标签: oracle excel


    【解决方案1】:
    有很多不同的方法,取决于 根据数据量,重复性 过程和编程量 我愿意投资。 首先,创建 Oracle 表,使用 SQL CREATE TABLE 语句定义表的 列的长度和类型。这是一个示例 sqlplus 'CREATE TABLE' 语句: 创建表 SPECIES_RATINGS (物种VARCHAR2(10), 数数, 评级 VARARC2(1)); 然后使用以下任何方法加载数据 方法或您发明的全新方法: ------------------------------------------ 第一种加载方法: 我使用 SQL*Loader 方法。 您需要保存电子表格的副本 CSV 或 PRN 等文本格式。 CSV 文件的 SQL*Loader 控制文件: 加载数据 infile 'c:\data\mydata.csv' 进入表emp 以“,”结尾的字段可选地用“”'括起来 (empno, empname, sal, deptno) 有一些 GUI 有向导引导您完成 流程(企业管理器 -> 维护 -> 数据移动 -> 移动行数据 -> 从用户文件加载数据) 临时进口。 Toad for Oracle 有一个 SQL*Loader 向导作为 好。 (DBA -> 数据导入/导出 -> SQL*Loader 向导) 如果您是,您可以将 Excel 数据保存为 PRN 格式 计划在您的 控制文件。 PRN 文件的 SQL*Loader 控制文件: 加载数据 infile 'c:\data\mydata.prn' 代替 进入表部门 ( 部门位置 (02:05) char(4), 部门名称位置 (08:27) char(20) ) Position(02:05) 将给出第 2 到第 5 个字符 完成 EM 或 Toad 向导后,我会保存 控制文件,在文本编辑器中根据需要对其进行调整, 并在 SQL*Plus 脚本中重用它。 SQL*Loader 也很方便,因为它允许您 跳过某些数据并调用过滤器功能(即 本机函数,如 DECODE() 或 TO_DATE() 或 用户定义的函数)在您的控制 .ctl 文件中。 您可以从提供的多个输入文件中加载 他们通过重复使用相同的记录格式 INFILE 子句。这是一个例子: 加载数据 INFILE file1.prn INFILE file2.prn INFILE 文件 3.prn 附加 INTO TABLE emp ( empno POSITION(1:4) 外部整数, 命名位置(6:15)字符, deptno POSITION(17:18) 字符, 经理位置(20:23) 外部整数 ) 您还可以指定多个“INTO TABLE”子句 在 SQL*Loader 控制文件中加载到多个 表。 加载数据 INFILE 'mydata.dat' 代替 INTO TABLE emp 当 empno != ' ' ( empno POSITION(1:4) 外部整数, 命名位置(6:15)字符, deptno POSITION(17:18) 字符, 经理位置(20:23) 外部整数 ) INTO表项目 当项目!='' ( projno POSITION(25:27) 外部整数, empno POSITION(1:4) 外部整数 ) 使用 SQL*Loader,您可以选择性地仅加载 您需要的记录(参见 WHEN 子句),跳过 加载数据时的某些列(请参阅 FILLER 列)并加载多行记录(请参阅 连接和继续) 创建控制文件后,您需要 从命令行启动 sql loader,如下所示: sqlldr 用户名/密码@connect_string control=ctl_file.ctl log=log.log 您可以创建一个批处理文件来调用 sqlldr。 有关更多示例,请参阅 http://examples.oreilly.com/orsqlloader/ 多功能的 SQL*Loader 就是这样。 ------------------------------------------ 第二种加载方式: 在这种情况下,我可以完全控制 电子表格,但对数据的控制较少,因为 用户将带有数据的电子表格发回给我。 我在同一个 Excel 中创建另一个工作表 文件,该文件已锁定 INSERT 语句 参考数据表。什么时候 我收到电子表格,我复制并粘贴 将语句直接插入 SQL*Plus,或 间接地将它们暂存在 SQL 脚本中。 Excel是一个很好的动态组合工具 动态的 SQL 语句。 (见 Excel 函数) ------------------------------------------ 第三种加载方式: 如果您需要一个实用程序将 Excel 数据加载到 Oracle,从 sourceforge 下载快速加载 http://sourceforge.net/projects/quickload ------------------------------------------ 第四种加载方式: 从理论上讲,这应该有效。 配置通用数据库连接(异构数据库 HS) 通过 ODBC 从 Oracle 连接到 Excel 电子表格。 描述它(参见 DESC 命令)或 从 ExcelTable 中选择 col1、col2 创建表 制作副本并查看 Oracle 分配的数据类型 默认情况下的列。 http://www.e-ammar.com/Oracle_TIPS/HS/configuring_generic_database_con.htm ------------------------------------------ 参考: http://209.85.173.132/search?q=cache:GJN388WiXTwJ:www.orafaq.com/wiki/SQL*Loader_FAQ+Oracle+control+file+columns&cd=3&hl=en&ct=clnk&gl=us http://forums.oracle.com/forums/thread.jspa?threadID=305918&tstart=0 http://techrepublic.com.com/5208-6230-0.html?forumID=101&threadID=223797&messageID=2245485 http://examples.oreilly.com/orsqlloader/

    【讨论】:

    • 除了sql loader,还可以使用外部表导入prn格式的数据。
    【解决方案2】:

    一位 DBA 曾经向我展示了一个简单的技巧:

    在某个地方,如另一张纸,创建一个公式,如:

    INSERT INTO my_table (name, age, monkey) VALUES ('" & A1 & "', " & B1 & ", '" & C1 & "');"
    

    将其复制/粘贴到适当的行中(Excel 会自动将您的公式更改为 A2、A3 等)

    然后将结果复制/粘贴到sqlplus中。

    【讨论】:

    • 这给了我一个错误,说公式不正确。
    • 确保正确平衡单引号和双引号。这可能很棘手。
    【解决方案3】:

    我能想到的最简单的方法是将 Access 放在中间。附加到 Excel(或将数据导入 Access);然后附加到目标 Oracle 表并复制。 Access Export 工具也运行良好。

    【讨论】:

      【解决方案4】:

      【讨论】:

        【解决方案5】:

        可能是DBD::OracleDBD::ExcelDBIx::Copy 的某种组合?但肯定有更简单的方法...

        【讨论】:

          【解决方案6】:

          如果它是一次性的或罕见的,并且您可以导出到 csv,那么 Application Express 或 SQL Loader 工具就可以正常工作。如果这是正常的事情,那么我会接受 Chris 的建议。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-11-09
            • 2016-05-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-09-18
            • 2017-11-18
            • 1970-01-01
            相关资源
            最近更新 更多