在 oracle 中批量插入时表名无效

Posted

技术标签:

【中文标题】在 oracle 中批量插入时表名无效【英文标题】:Invalid table name while bulk insert in oracle 【发布时间】:2016-12-13 14:38:18 【问题描述】:

我正在尝试使用 Bulk Insert 查询将值插入 Oracle 表,但出现以下错误

ORA-00903: invalid table name
00903. 00000 -  "invalid table name"
*Cause:    
*Action:
Error at Line: 4 Column: 5

这是我的查询

BULK INSERT TEST1.STUDENT
    FROM 'C:\Users\Alan\Desktop\STUDENT.txt'
        WITH
(
            FIELDTERMINATOR = '\t',
            ROWTERMINATOR = '\n'
);

为什么会出现这个错误。查询有问题吗?请帮忙。谢谢

更新

我将文件格式更改为CSV,并在下面写了查询

LOAD DATA
INFILE 'C:\Users\Alan\Desktop\STUDENT.csv'
INTO TABLE TEST1.STUDENT
FIELDS TERMINATED BY ","
(ID,
NAME);

但上面的查询给出了

ORA-00928: missing SELECT keyword
00928. 00000 -  "missing SELECT keyword"
*Cause:    
*Action:
Error at Line: 16 Column: 2

上面的语法有什么问题?

【问题讨论】:

这根本不是 Oracle 语法。 【参考方案1】:

这根本不是 Oracle 语法。如果您需要将数据从文件加载到表,请使用SQLoader 或External table 关于External table 和SQLoader 的一些文档

如果您使用的是 SQLDeveloper,您还可以使用导入工具。

也请看一下thread。

[编辑

LOAD DATA
INFILE 'C:\Users\Alan\Desktop\STUDENT.csv'
INTO TABLE TEST1.STUDENT
FIELDS TERMINATED BY ","
(ID,
NAME);

这不是查询。这是控制文件的内容。请将其保存到文件 load.csv 然后运行 ​​cmd(如果你在 Linux 上,则运行 shell)并输入:

sqlldr user/pass control=load.ctl

您可以找到一些示例here。

【讨论】:

我已根据 SO 答案使用更新后的查询更新了我的帖子,但出现错误。请查看更新的查询和错误。更新后的查询有什么问题?谢谢 @Lara 我已经编辑了答案并添加了如何运行 SQLoader 的示例。您使用什么客户端/IDE? 知道了。谢谢

以上是关于在 oracle 中批量插入时表名无效的主要内容,如果未能解决你的问题,请参考以下文章

Oracle批量插入数据SQL语句太长出错:无效的主机/绑定变量名

Oracle:使用 select 插入不返回批量收集新插入的 id

oracle——数据表的相关操作——插入数据以及批量插入数据

Oracle批量插入数据时报字段无法识别错误

Oracle批量插入数据时报字段无法识别错误

踩坑了!踩坑了!NHibernate使用批量插入Oracle数据,Batch属性