2012-03-30 83 views
8

我最初在超级用户上问过这个问题,但有人建议我在这里重新发布。在Oracle中导入CSV数据(尝试Apex/SQL Developer)

我正在使用最新版本的APEX(4.1.1)和Oracle(11.2.0.3)。我上传CSV数据到一组表格。 我一直在尝试它,并遇到一些我从未见过的问题。

作为一个例子,我试图将数据导入到该表中:

CREATE TABLE SW_ENGINEER 
    (ENGINEER_NO VARCHAR2(10), 
      ENGINEER_NAME VARCHAR2(50), 
      CONSTRAINT SW_ENG_PK PRIMARY KEY (ENGINEER_NO)) 

它无法在这个简化的数据子集:

call log no,contract_no,call date,agreed date,agreed time,actual arrive,engineer no,engineer name,equipment code,cust desc,eng desc 
a,b,c,22-Mar-06,1,23/03/2006 15:00,654,Flynn Hobbs,d,e,f 
a,b,c,22-Mar-06,2,23/03/2006 15:00,654,Flynn Hobbs,d,e,f 
a,b,c,19-Mar-06,3,19/03/2006 09:15,351,Rory Juarez,d,e,f 

(它无法在更大的数据集相同的方式) 我不能与任何APEX或SQL Developer中加载它,如下所示:

  • APEX:随着APEX数据工作购物,导入文本,加载现有表格,使用逗号分隔,选择表格和文件,勾选'标题行'复选框,我们的列映射表单显示正确的数据。然后将除engineer_no和engineer_name之外的所有列设置为“否”,然后单击Load Data。

这似乎工作,并显示在文本数据加载存储库中的汇总行,但在检查它已加载0行和79失败。点击79表示他们都遭受“ORA-01008:并非所有变量都绑定”。所选列对我来说看起来不错,所以我想知道它是否还包括其他一些,尽管“否”设置?

如果我在上传之前编辑csv以删除不相关的列,则不会发生此问题,但如果我可以使用列映射,则会更容易。

  • SQL开发人员:在SD使用导入数据向导,我发现,除非标题行被选中它不会发展成列映射(?按钮已启用,但不工作 - 为什么不), - 但是如果它被检查(在这种情况下正确),那么验证步骤失败,因为“表格列工程师没有足够大......”。

我发现可以通过从csv文件列中删除标题值来克服。所以看起来,设置标题行复选框实际上并不会导致它忽略标题行,并且它是导致错误的标题值'engineer-no'。这对我来说不太合适。 我过去曾使用过这两种方法,但我想知道最近的升级是否与此有关。

任何想法?还是我错过了明显的东西?

+1

csv文件中的任何字段中是否有','? – MatBailie 2012-03-30 10:43:09

+0

是的,但之后它们被引用“like,this” – boisvert 2012-03-30 10:44:37

+1

您是否测试过简单1或2行的csv没有这样的字段,另外1行或2行的csv有这样的字段?如果前者失败了,你就会遇到更大的问题,如果前者成功,后者失败,你就隔离了这个问题。在你的数据中还有一些其他的特性,用Excel或其他软件分析它 – MatBailie 2012-03-30 10:46:31

回答

2

我的一位同事认为这(不完全满意)解决方案:

,如果你需要的列都在开始时,它的工作原理,这样的:

engineer no,engineer name,equipment code,cust desc,eng desc,call log no,contract_no,call date,agreed date,agreed time,actual arrive 
654,Flynn Hobbs,d,e,f,a,b,c,22-Mar-06,1,23/03/2006 15:00 
654,Flynn Hobbs,d,e,f,a,b,c,22-Mar-06,2,23/03/2006 15:00 
351,Rory Juarez,d,e,f,a,b,c,19-Mar-06,3,19/03/2006 09:15 

所以它看起来像一个APEX文本导入中包含YES/NO功能的错误?

0

在CSV

call log no,contract_no,call date,agreed date,agreed time,actual arrive,engineer no,engineer name,equipment code,cust desc,eng desc 
a,b,c,22-Mar-06,1,23/03/2006 15:00,654,Flynn Hobbs,d,e,f 
a,b,c,22-Mar-06,2,23/03/2006 15:00,654,Flynn Hobbs,d,e,f 
a,b,c,19-Mar-06,3,19/03/2006 09:15,351,Rory Juarez,d,e,f 

你有11个栏目,并尝试将其导入在3列。

  1. 如果您在CSV有“你768,16将它们全部删除。
  2. 您必须表正好11列这个CSV。
  3. 在表中的每一列可能具有正确的数据类型。
  4. 在CSV中,每一个都是一个列分隔符
0

我不太清楚为什么它不适合你。对于我来说,使用Apex Data Workshop进行复制和粘贴,效果很好。 )

当然,我只能上传这三个结果中的两个,其中一个具有重复的ID值。但它的工作。 PS:对于可能具有','作为行的列值的一部分的较大数据集,请考虑使用“可选封闭选项”选项(使用双引号(“)”上传向导,它将整个值视为一个值