2015-04-28 61 views
1

我在这个类型的 - [R SQL查询:RODBCext查询参数

query <- "SELECT a.* FROM 
       ((SELECT x,y,z FROM t1,t2,t3 where c1 = ? and c2 = ?) as b 
       LEFT JOIN 
       (SELECT x1,y1,z1 FROM t4, t5, t6 where c3 = ? and c4 = ?) as c 
        ON b.x = c.x1) as a" 

我使用RODBCext连接和查询数据库。 我不喜欢这样写道:

library(RODBCext) 
    conHandle <- odbcConnect("dsn", uid="uid", pwd = "pwd", believeNRows = FALSE) 
    parameters <- data.frame(v1,v2,v3,v4) #values for parameters 
    response <- sqlExecute(conHandle, query, parameters, fetch = TRUE) 

我收到此错误:

Error in sqlExecute(conn, upit, parameters, fetch = TRUE) : 
    [RODBCext] Error: Number of parameters in query do not match number of columns in data 

这个任何帮助?

+0

很明显,这将是艰难的没有一个例子。你能逐步验证吗?即只运行带有2个参数data.frame的t1,t2,t3语句?我还建议你合理化你的sql语句,使它更容易调试,因为这个例子不会像需要子查询那样流口水。 –

+0

Steph谢谢!我的代码显示在这里是好的。在我的代码中,我有参数< - data.frame(c(v1,v2,v3,v4)),这是问题。代码工作正常。 – Bojan

回答

0

回答这个的人正在寻找事实后:

按照github上的rodbcext包:这个错误抛出,因为PARAMS(在你的SQL查询问号的数量)的数量不匹配的数量中的参数数据帧。所犯的错误是将data.frame中的向量包装成n行而不是n列。

if(nparams != LENGTH(data)) 
{ 
    error(_("Number of parameters does not match number of columns in provided data")); 
    FreeHandleResources(thisHandle); 
    return 100; 
}