Oracle Live执行SQL报ORA-00936: missing expression错误排查
ORA-00936: missing expression 错误排查与修复
错误原因
- 报错核心原因是SQL中使用了Oracle不支持的
DATE()双参数调用语法:Oracle没有接收「日期字符串+格式掩码」两个入参的DATE()函数,该写法是MySQL等其他数据库的日期转换语法,Oracle SQL解析器无法识别该段语法,因此抛出缺失表达式错误。 - Oracle中
DATE的合法使用场景只有两类:- 定义字段/变量的日期数据类型,比如建表语句中的
da date属于正确用法 - 作为ANSI日期字面量前缀,仅支持固定格式
DATE 'YYYY-MM-DD',不支持自定义格式,也不能用括号包裹多参数传入
- 定义字段/变量的日期数据类型,比如建表语句中的
修复方案
根据使用场景选择以下任意一种写法即可:
- 使用Oracle原生
TO_DATE函数做自定义格式转换,完全匹配原日期格式需求:
create table dat(da date); insert into dat values(TO_DATE('06/03/76', 'dd/mm/yy'));
- 如果使用ANSI标准日期字面量写法,需将日期调整为固定的
YYYY-MM-DD格式,无需传入格式参数:
create table dat(da date); -- 对应原日期06/03/76(dd/mm/yy)即1976年3月6日 insert into dat values(DATE '1976-03-06');
修复后可执行
SELECT * FROM dat;验证结果,能正常查询到插入的日期记录即代表运行成功。
内容的提问来源于stack exchange,提问作者SameerZaki Diwan
相关产品推荐
相关产品推荐

