通过source()

时间:2018-07-25 12:54:57

标签: sql r oracle rodbc

我在多个文件上分布了多个SQL查询(和R计算),应使用sqlQuery()包中的RODBC执行这些文件。每个文件都会通过odbcConnect()打开自己的连接。只要在相应的R脚本内调用查询,这些脚本就可以提供所需的结果。 但是,一旦我尝试通过source()函数从另一个图元文件执行脚本,我就会从包含非UTF-8字符的查询中得到一个错误(无效字符)。

现在我尝试使用指定不同的编码

odbcConnect(DBMSencoding = "")
odbcConnect(DBMSencoding = "UTF-8")
odbcConnect(DBMSencoding = "UTF8")
odbcConnect(DBMSencoding = "ASCII")
odbcConnect(DBMSencoding = "ANSI")

这不会改变结果。

使用以下命令告诉我,数据库(NLS_CHARACTERSET)的编码为UTF8(Oracle数据库)。

SELECT *
FROM NLS_DATABASE_PARAMETERS 
WHERE PARAMETER IN ('NLS_CHARACTERSET');

但是,我无法使包含非UTF-8字符的查询正常工作。

尝试使用source()在R脚本中执行SQL查询时,编码是否是实际问题? 并有建议如何使其工作吗?

提前谢谢!


[编辑] 这是我的问题的一个简短的可复制示例:

df <- sqlQuery(channel, paste(
  "
SELECT NR AS TÄST
FROM TEST.DATA
  ",
sep = "")) 

这在R脚本中有效,但是使用source((paste(path, "script.R", sep=""), print.eval=TRUE, echo=TRUE)调用脚本时出现以下错误:

"HY000 911 [Oracle][ODBC][Ora]ORA-00911: Invalid character\n"

将“TÄST”更改为“ TEST”,甚至将“TÜST”更改为有效,因为“TÜST”被转换为“TÃST”。因此,我假设编码存在问题。

0 个答案:

没有答案