【发布时间】:2012-04-14 00:54:24
【问题描述】:
我最初在超级用户上问过这个问题,但有人建议我在这里重新发布。
我正在使用最新版本的 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 Data Workshop,导入文本,加载现有表格,使用逗号分隔,选择表格和文件,勾选“标题行”复选框,我们就有了显示正确数据的列映射表单。然后将除engineer_no 和engineer_name 之外的所有列设置为“No”,然后点击Load Data。
这似乎有效,并在文本数据加载存储库中显示了一个摘要行,但在检查时它已加载 0 行和 79 行失败。单击 79 表明它们都患有“ORA-01008: not all variables bound”。所选列对我来说看起来不错,所以我想知道尽管设置为“否”,但它是否仍包括其他一些列?
如果我在上传之前编辑 csv 以删除不相关的列,则不会出现此问题,但如果我可以使用列映射会容易得多。
- SQL Developer:使用 SD 中的导入数据向导,我发现它不会进行列映射,除非选中 Header Row(按钮已启用但不起作用 - 为什么不呢?), - 但如果它被检查(在这种情况下是正确的)然后验证步骤失败,因为“表列 Engineer_no 不够大......”。
我发现可以通过从 csv 文件列中删除标题值来克服这个问题。因此,似乎设置 Header Row 复选框实际上并不会导致它完全忽略标题行,而是标题值“engineer-no”导致了错误。这对我来说似乎不对。 我过去使用这两种方法都没有问题,我想知道最近的升级是否与此有关。
有什么想法吗?还是我遗漏了一些明显的东西?
【问题讨论】:
-
csv 文件中的任何字段中是否包含
,? -
是的,但随后它们被引用为“like, this”
-
您是否测试过没有此类字段的简单 1 行或 2 行 csv。还有 1 或 2 行带有此类字段的 csv?如果前者失败了,那你的问题就更大了。如果前者成功而后者失败,那么您已经隔离了问题。如果两者都成功,那么您的数据中还有其他一些特殊性。在 Excel 中分析它。
-
即使是前三行(我在这里包括的那些)也无法导入。我没有看到任何应该破坏导入的东西......但显然没有朝着正确的方向发展。
-
赏金还剩几个小时...所以这是一个 APEX 错误,最糟糕的解决方法是将我们想要的列粘贴在 CSV 文件的左端,是吗?我觉得在这里奖励自己是愚蠢的:)
标签: sql oracle csv import oracle-apex