我正在尝试使用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语法中。
答案 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中执行它?