ORA-00936: 插入数据时缺失表达式问题求助
Oracle插入数据报错ORA-00936及TO_DATE使用问题解决
问题根源
Oracle数据库中不存在DATE('字符串', '格式')这种语法,这是MySQL等其他数据库的写法。你之前用TO_DATE提示无效,大概率是格式符与字符串不匹配或语法细节错误,改用DATE函数后直接触发ORA-00936(缺少表达式)的语法错误。
修正后的代码
原建表语句无需修改,插入语句需要做以下调整:
- 替换所有
DATE()为Oracle专用的TO_DATE()函数 - 确保日期字符串的分隔符与格式符一致(比如
01-07-2022对应DD-MM-YYYY) - 时间格式符用
HH:MI AM(12小时制),避免单H导致的解析问题 - 字符串类型的
BOOKINGID值需加单引号,符合语法规范
修正后的INSERT语句:
INSERT INTO BOOKING VALUES( '4011', TO_DATE('01/05/2022', 'DD/MM/YYYY'), TO_DATE('1:00PM', 'HH:MI AM'), TO_DATE('01-07-2022', 'DD-MM-YYYY'), TO_DATE('2:00PM', 'HH:MI AM'), TO_DATE('03-07-2022', 'DD-MM-YYYY'), TO_DATE('3:00PM', 'HH:MI AM'), 2, 0, 'Birthday Cake for dinner on 09-07-2022' );
关键错误点说明
- 函数误用:Oracle仅支持
TO_DATE(字符串, 格式)来完成字符串到日期的转换,不支持其他数据库的DATE函数语法 - 格式不匹配:日期字符串中的分隔符(
/或-)必须与格式符中的对应符号一致,否则会触发日期解析错误 - 时间格式符:12小时制的小时部分建议用
HH,单H在部分场景下可能无法正确解析带AM/PM的时间 - 字符串类型值:
BOOKINGID定义为varchar(4),插入时需将数字用单引号包裹,避免隐式转换带来的潜在问题
内容的提问来源于stack exchange,提问作者Lovena Ujoodha
相关产品推荐
相关产品推荐

