SQL - 语法时缺少关键字

时间:2015-06-10 15:45:49

标签: sql oracle oracle-sqldeveloper

我收到此错误消息

  

缺少关键字

有什么建议吗?谢谢

CASE WHEN 
     substr(M1.M_GL_LINE_NO,length(M1.M_GL_LINE_NO - 4),4)>=0 
         and substr(M1.M_GL_LINE_NO,length(M1.M_GL_LINE_NO - 4),4) < 4000 
         then 'ASSET'
ELSE CASE WHEN 
         substr(M1.M_GL_LINE_NO,length(M1.M_GL_LINE_NO - 4),4)>=4000 
            and substr(M1.M_GL_LINE_NO,length(M1.M_GL_LINE_NO - 4),4) < 8000 
         then 'LIABILITY' 
ELSE CASE WHEN
          substr(M1.M_GL_LINE_NO,length(M1.M_GL_LINE_NO - 4),4)>=8000 
           and substr(M1.M_GL_LINE_NO,length(M1.M_GL_LINE_NO - 4),4) < 9000 
          then 'OFF BALANCE SHEET ASSET' 
ELSE CASE WHEN 
         substr(M1.M_GL_LINE_NO,length(M1.M_GL_LINE_NO - 4),4)>=9000 
         and substr(M1.M_GL_LINE_NO,length(M1.M_GL_LINE_NO - 4),4) < 10000 
         then 'OFF BALANCE SHEET LIABILITY' end as ASSET_TYPE,

2 个答案:

答案 0 :(得分:1)

我认为你正在使用更多&#34; CASE&#34;你的案例陈述中的单词。删除&#34; ELSE CASE&#34;在每个&#34;然后&#34;。 Refer this Oracle Documentation

CASE WHEN 
     substr(M1.M_GL_LINE_NO,length(M1.M_GL_LINE_NO - 4),4)>=0 
         and substr(M1.M_GL_LINE_NO,length(M1.M_GL_LINE_NO - 4),4) < 4000 
         then 'ASSET'
     WHEN 
         substr(M1.M_GL_LINE_NO,length(M1.M_GL_LINE_NO - 4),4)>=4000 
            and substr(M1.M_GL_LINE_NO,length(M1.M_GL_LINE_NO - 4),4) < 8000 
         then 'LIABILITY' 
     WHEN
          substr(M1.M_GL_LINE_NO,length(M1.M_GL_LINE_NO - 4),4)>=8000 
           and substr(M1.M_GL_LINE_NO,length(M1.M_GL_LINE_NO - 4),4) < 9000 
          then 'OFF BALANCE SHEET ASSET' 
    WHEN 
         substr(M1.M_GL_LINE_NO,length(M1.M_GL_LINE_NO - 4),4)>=9000 
         and substr(M1.M_GL_LINE_NO,length(M1.M_GL_LINE_NO - 4),4) < 10000 
         then 'OFF BALANCE SHEET LIABILITY' 
 END as ASSET_TYPE,

一般语法为

CASE  
   WHEN col = 1 THEN 'Active' 
   WHEN col = 2 THEN 'Inactive' 
   WHEN col = 3 THEN 'Terminated' 
END AS StatusText 

答案 1 :(得分:0)

解决方案是:

case when substr(M1.M_GL_LINE_NO,length(M1.M_GL_LINE_NO - 4),4)>=0 and substr(M1.M_GL_LINE_NO,length(M1.M_GL_LINE_NO - 4),4) < 4000 then 'ASSET'
     when substr(M1.M_GL_LINE_NO,length(M1.M_GL_LINE_NO - 4),4)>=4000 and substr(M1.M_GL_LINE_NO,length(M1.M_GL_LINE_NO - 4),4) < 8000 then 'LIABILITY' 
     when substr(M1.M_GL_LINE_NO,length(M1.M_GL_LINE_NO - 4),4)>=8000 and substr(M1.M_GL_LINE_NO,length(M1.M_GL_LINE_NO - 4),4) < 9000 then 'OFF BALANCE SHEET ASSET' 
     when substr(M1.M_GL_LINE_NO,length(M1.M_GL_LINE_NO - 4),4)>=9000 and substr(M1.M_GL_LINE_NO,length(M1.M_GL_LINE_NO - 4),4) < 10000 then 'OFF BALANCE SHEET LIABILITY' 
else '' end as ASSET_TYPE,

感谢