使用CASE WHEN语句时RODBC“无效字符\ n”错误

时间:2014-07-09 19:34:59

标签: sql r oracle oracle-sqldeveloper rodbc

我正在尝试使用R中的RODBC在Oracle SQL数据库上执行简单的“if / then”语句.SQL语句在SQL Developer v4.0.2.15中正常工作但在执行相同语句时会引发错误[R

sqlQuery(channel, "
select
    Variable1,
    Variable2,
    CASE WHEN Variable1 = 0 then 0 else 1 end as Var3
from schema.TABLE
where ROWNUM<100;
           "
  )

错误消息(已更新):

[1] "[1] "HY000 936 [Oracle][ODBC][Ora]ORA-00936: missing expression\n"
[2] "[2] ... 

删除CASE WHEN行时,该语句可以正常工作,因此错误必须在CASE WHEN语法中。

2 个答案:

答案 0 :(得分:3)

我发现分号有时会在这种情况下引起问题。

> sqlQuery(con, "select case when dummy = 'X' then 1 else 0 end from dual")
  CASEWHENDUMMY='X'THEN1ELSE0END
1                              1

> sqlQuery(con, "select case when dummy = 'X' then 1 else 0 end from dual;")
[1] "HY000 911 [Oracle][ODBC][Ora]ORA-00911: invalid character\n"                                       
[2] "[RODBC] ERROR: Could not SQLExecDirect 'select case when dummy = 'X' then 1 else 0 end from dual;'"
> close(con)

答案 1 :(得分:0)

如果您查看SQL语句(它似乎在错误消息中完整显示),我们会看到:

    '\nselect\n    UW_NET_ULTIMATE_LOSS_USD,\n    UW_NET_WRITTEN_PREMIUM_USD,\n    
IF UW_NET_WRITTEN_PREMIUM_USD = 0 THEN testvar=0 ELSE testvar=1 end\n
from bqiread.POLICY_METRICS\nwhere ROWNUM<100;\n 

这里没有CASE语句....它似乎是一个IF / THEN / ELSE,它不是有效的Oracle语法。

也许你的工具是为不同的RDBMS生成SQL而不是Oracle,并尝试在Oracle中执行它?