缺少关键字ora -00905

时间:2017-10-18 20:57:46

标签: sql

执行以下查询时,我收到问题标题中指示的错误:

ToDoItem

任何人都可以告诉我为什么上述查询失败

select mantas_stg.NY_EGIFTS_TRANS_STG.*,
CASE WHEN  MANTAS_STG.NY_EGIFTS_TRANS_STG.FUNDS_ORIG_CURR != 'USD' THEN 
CASE WHEN  MANTAS_STG.NY_EGIFTS_TRANS_STG.FUNDS_ORIG_CURR != 'USD' AND MANTAS_STG.NY_EGIFTS_TRANS_STG.FUNDS_LOCAL_CURR != 'USD'  THEN 
MANTAS_STG.NY_EGIFTS_TRANS_STG.FUNDS_ORIG_AMT = MANTAS_STG.NY_EGIFTS_TRANS_STG.FUNDS_ORIG_AMT * 100
END
END 
from mantas_stg.NY_EGIFTS_TRANS_STG;

2 个答案:

答案 0 :(得分:0)

嵌套case中的以下行可能是问题所在:

THEN MANTAS_STG.NY_EGIFTS_TRANS_STG.FUNDS_ORIG_AMT = MANTAS_STG.NY_EGIFTS_TRANS_STG.FUNDS_ORIG_AMT * 100

您尝试在MANTAS_STG.NY_EGIFTS_TRANS_STG.FUNDS_ORIG_AMT语句中为select分配一个不允许的值

如果您的目标是更新特定记录的该列中的值,则应使用update语句。

答案 1 :(得分:0)

一个人不会在case表达式中指定值。我想你想要这样的东西:

select s.*,
       (CASE WHEN s.FUNDS_ORIG_CURR <> 'USD' AND s.FUNDS_LOCAL_CURR <> 'USD'
             THEN s.FUNDS_ORIG_AMT * 100
             ELSE s.FUNDS_ORIG_AMT
        END) as new_funds_orig_amt
from mantas_stg.NY_EGIFTS_TRANS_STG s;

缩进和表别名确保查询更容易阅读。