今天跟大家唠唠我昨天遇到的一个糟心事儿,跟`MISSING EXPRESSION`这个报错杠上,现在总算是解决,赶紧记录下来,省的以后再掉坑里。
事情是这样的,昨天在搞一个数据统计的SQL,噼里啪一顿操作,自信满满地一点运行,结果直接给我报个`ORA-00936: MISSING EXPRESSION`。当时我就懵,心想这啥玩意儿?我表达式?难道我写个寂寞?
赶紧回头检查我的SQL语句,左看右看上看下看,愣是没看出个所以然来。感觉每个字段都选,每个表都连,条件也写,函数也用,怎么就`MISSING EXPRESSION`?
第一步,我先怀疑是不是自己手误,把哪个关键词给打错。于是我把SQL语句复制出来,放到文本编辑器里,一个字母一个字母地对着源SQL仔细检查。结果,语法关键词没问题,表名也没问题,字段名也没问题。这就更奇怪,难道是Oracle抽风?
第二步,我就开始怀疑是不是选取的字段跟`FROM`之间多逗号。这种错误我以前也犯过,就是复制粘贴的时候没注意,多一个逗号。赶紧检查,果然,眼都花,真就是这里出问题!我复制字段的时候,手一抖,多复制个逗号。这下可Oracle直接懵逼,不知道`FROM`后面是啥。把逗号删掉,再运行,果然,世界清净!
- 错误原因一:选取的字段与 FROM 之间多逗号
第三步,本以为到这里就结束,结果好景不长,改完逗号之后,再次运行,还是报`MISSING EXPRESSION`!我心态有点崩,难道还有其他问题?
冷静下来,我又仔细看一遍SQL,这回我把注意力放在字段名上。突然,我发现有个字段名竟然是Oracle的关键字!我当时就想骂人,谁这么缺德,用关键字做字段名?没办法,遇到这种奇葩情况,只能想办法解决。我把这个字段名用双引号括起来,告诉Oracle这是一个字段名,不是关键字。再次运行,OK,这下终于没报错!
- 错误原因二:使用Oracle关键字作为字段名
为确保万无一失,我又仔细检查SQL语句中的每个表达式,看看有没有哪里写错或者格式不对。还这回没发现其他问题。总算是把这个`MISSING EXPRESSION`给解决。虽然过程有点曲折,但是也学到不少东西。
遇到`MISSING EXPRESSION`这个报错,不要慌,先冷静分析。检查是不是多逗号,然后检查是不是用关键字做字段名,再仔细检查每个表达式,看看有没有写错或者格式不对的地方。只要耐心一点,总能找到问题所在。
这回的经历也让我明白,写SQL一定要仔细,不要想多检查几遍总是没错的。也希望我的这个记录能帮到大家,以后遇到类似的问题,可以少走一些弯路。