Oracle Application Express 11g执行INSERT语句时出现ORA-00911无效字符错误的排查求助
搞定ORA-00911: invalid character报错的几个关键点
嘿,我刚看了你的问题,在Oracle APEX里执行INSERT语句碰到ORA-00911错误,这个报错一般是SQL里有Oracle认不出来的字符,或者数据格式和表字段对不上。结合你的语句,我给你梳理几个大概率的问题:
1. 时间字段的分隔符用错了
你写的AB_ZEIT值,比如11.23,Oracle里时间的小时和分钟得用:分隔,而且得用单引号包起来当成字符串,比如'11:23'。要是AB_ZEIT是DATE类型的话,最好用TO_DATE函数明确指定格式,避免Oracle猜格式出错。
2. 日期格式和Oracle默认不兼容
你的AB_DATUM传的是'06.07.13'这种点分隔的格式,Oracle默认的日期格式大概率不是这个(比如默认是DD-MON-RR,像07-JUL-13)。所以得用TO_DATE把字符串转成日期类型,指定好格式,比如:TO_DATE('06.07.13', 'DD.MM.RR')。
3. 检查有没有隐藏的无效字符
有时候复制粘贴的SQL里会混进全角空格、奇怪的特殊字符,这些肉眼看不见但Oracle会报错。你可以把语句粘到纯文本编辑器(比如Notepad++),打开显示所有字符的功能,看看有没有异常的东西。
给你改好的示例语句
我把第一条语句改成符合Oracle规范的样子,你照着改其他的就行:
INSERT INTO abflug (AB_DATUM, F_BEZ, HERST, TYP, SER_NR, PER_NR, AB_ZEIT) VALUES (TO_DATE('06.07.13', 'DD.MM.RR'), 'LH-888', 'Boeing', 'B747', '9fg-he-ztu8', 10010071, TO_DATE('11:23', 'HH24:MI'));
另外,一次性插多条数据效率更高,写法是这样的:
INSERT INTO abflug (AB_DATUM, F_BEZ, HERST, TYP, SER_NR, PER_NR, AB_ZEIT) VALUES (TO_DATE('06.07.13', 'DD.MM.RR'), 'LH-888', 'Boeing', 'B747', '9fg-he-ztu8', 10010071, TO_DATE('11:23', 'HH24:MI')), (TO_DATE('08.10.13', 'DD.MM.RR'), 'LH-238', 'Airbus', 'A320', 'z3et-bwe7', 10010072, TO_DATE('22:06', 'HH24:MI')), -- 剩下的条目按这个格式依次补充就行 (TO_DATE('18.02.14', 'DD.MM.RR'), 'LH-238', 'Airbus', 'A320', 'z3et-bwe7', 10010072, TO_DATE('23:06', 'HH24:MI'));
小提示
- 先单独跑一条改好的语句,确认没问题再批量执行,这样容易排查问题
- 要是不确定表字段的类型,在SQL Workshop里执行
DESCRIBE abflug;就能看到表结构,确保数据类型匹配
内容的提问来源于stack exchange,提问作者DonDon
相关产品推荐
相关产品推荐

