dbWriteTable:DDL语句之后,只有ET或null语句是合法的。)

时间:2018-06-26 05:01:16

标签: r teradata rjdbc

我能够读取数据。但是,将数据写入Teradata数据库时,出现以下错误:

   Error in .verify.JDBC.result(s, "Unable to create JDBC prepared 
   statement ",  : 
   Unable to create JDBC prepared statement INSERT INTO 
   dl_nbu.alex_test2 VALUES(?,?) ([Teradata Database] 
   [TeraJDBC 16.10.00.07] [Error 3932] [SQLState 25000] Only an ET or 
   null statement is legal after a DDL Statement.)

这是我的代码:

     dbWriteTable(tdConnection, "dl_nbu.alex_test2", all_files4)

1 个答案:

答案 0 :(得分:0)

很难给出没有细节的答案。但是请查看RJDBC帮助页面:

  

由于JDBC可以与各种各样的数据库进行通信,因此数据库事先无法理解SQL方言。因此,RJDBC实现尝试遵守SQL92标准,但并非所有数据库都兼容。这主要影响必须自动生成SQL代码的功能,例如dbWriteTable。一种主要功能是对带引号的标识符的支持。 SQL92标准使用双引号,但是许多数据库引擎要么不支持双引号,要么使用其他字符。的   identifier.quote参数允许您为使用的数据库设置正确的引号字符。例如,MySQL将需要identifier.quote =“`”。如果设置为NA,则会禁用引用标识符的功能,这对可用于表和字段的名称构成了限制。其他功能不受影响。

尝试一下,看看会发生什么:

allfiles4 -> allFilesFour
dbWriteTable(tdConnection, "testTwo", allFilesFour)

如果可行,则问题出在引号标识符中。将连接所在的行更改为以下内容:

tdConnection <- dbConnect( JDBC( identifier.quote = "`" ), ...

查看此帖子:Do different databases use different name quote?