r - dbWriteTable:只有在 DDL 语句之后的 ET 或空语句是合法的。)
问题描述
我能够读取数据。但是,将数据写入 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)
解决方案
没有细节很难给出答案。但请查看 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 = "`" ), ...
查看这篇文章:不同的数据库是否使用不同的名称引用?
推荐阅读
- linux - 如何在树莓派 3B+ 上选择一个特定的 USB 端口来使用 arduino-mk 对两个 arduino 板进行编程?
- asp.net - 作为 Docker 应用程序运行时出现 React.Aspnet 错误的 ASP.NET Core 2.1 Web 应用程序
- php - 为什么 Bootstrap 网格定位会留下空列?
- python - 在数据框中填充 NaN 的函数
- java - 将字符串转换为十六进制值的字节数组
- tensorflow - 将数据集迭代器馈送到 TensorFlow
- node.js - Node JS Promise 然后在 Promise 解析之前阻塞执行
- php - PHP PDO如何更新信息
- python - 如何解开pickle扩展文件
- javascript - 为什么汉堡菜单块在打开时不显示?