ORA-00911错误

简介: ORA-00911,"911"看着很霸气的错误号,虽然我还是Oracle的初学者,但每次碰到一个未见过的ORA错误号后,都有一种查案的赶脚,根据错误号、OERR、相关错误信息,判断错误原因以及找到解决方案或替代方案,虽然大部分可能还是参考前辈或官方,但碰到一次后,至少是似曾相识了,再次碰到时即使不记得,大概也能有个方向。

ORA-00911,"911"看着很霸气的错误号,虽然我还是Oracle的初学者,但每次碰到一个未见过的ORA错误号后,都有一种查案的赶脚,根据错误号、OERR、相关错误信息,判断错误原因以及找到解决方案或替代方案,虽然大部分可能还是参考前辈或官方,但碰到一次后,至少是似曾相识了,再次碰到时即使不记得,大概也能有个方向。


话说回来,这个ORA-00911的错误,是在一段用JAVA写的测试用例中碰到的,

...

private static final String SQL_INSERT_TBL = "insert into tbl (id, ...) "
            + "values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, SYSDATE, SYSDATE);";

报的是这段SQL有这个错误。


看看错误描述:

ORA-00911 invalid character
Cause: Special characters are valid only in certain places. If special characters other than $, _, and # are used in a name and the name is not enclosed in double quotation marks ("), this message will be issued. One exception to this rule is for database names; in this case, double quotes are stripped out and ignored.
Action: Remove the invalid character from the statement or enclose the object name in double quotation marks.

很明显,这个错误主要是因为SQL中包含了非法字符,解析的时候出现报错。


但这个SQL很简单啊,就是一条INSERT语句,将他拷贝到plsql developer中好像是可以的啊,奇怪了。

调试很多次后,忽然发现,定义中结尾有个“;”,难道是这个的问题?

于是首先在plsql developer中执行INSERT语句,结尾带了两个“;”,果然报了这个ORA-00911错误。

修改代码中的语句:

private static final String SQL_INSERT_TBL = "insert into tbl (id, ...) "
            + "values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, SYSDATE, SYSDATE)";

果然,正常回显了。


一个看似简单,但挑错较麻烦的错误,值得自己的总结。

1. OERR错误描述是基准,要顺着这个方向排查,基本方向可以明确

2. 代码中出现的SQL错误,可以在plsql developer等工具中重新执行来模拟错误,但一定要和代码中的SQL语句一样,这里我可能拷贝的时候就没有带结尾的;,以至于第一次没有发现这个错误,总之一句话,除了需要判断大方向,最重要的一点就是细心,不要放过任何一个小的细节


可以参考杨长老曾经一样遇到的这个ORA-00911错误:http://blog.itpub.net/4227/viewspace-68615/

目录
相关文章
|
负载均衡 前端开发 Cloud Native
API 网关选型及包含 BFF 的架构设计
在更通用的场景下我们会使用 NGINX 这样的软件做前置,用来处理SLB负载均衡过来的流量,作用是反向代理、集群负载均衡、转发、日志收集等功能。
API 网关选型及包含 BFF 的架构设计
|
机器学习/深度学习 人工智能 搜索推荐
AI与时尚产业:个性化购物体验
在科技日新月异的今天,人工智能(AI)正深刻改变时尚产业。AI不仅为时尚设计注入新活力,还通过个性化推荐、虚拟试穿和优化客户服务,极大提升了消费者的购物体验。本文探讨AI如何重塑时尚产业,为消费者带来前所未有的个性化购物享受。
|
敏捷开发 架构师 Java
【领域驱动设计专题】一文带领你透视DDD领域驱动模型的本质和设计原理分析指南(基本概念篇)
【领域驱动设计专题】一文带领你透视DDD领域驱动模型的本质和设计原理分析指南(基本概念篇)
375 0
|
12月前
|
传感器 数据采集 监控
物联网 GE-PREDIX
GE-Predix 是一个由通用电气公司开发的工业互联网平台,旨在为工业设备提供连接、分析和管理服务。它支持设备数据的收集与分析,帮助企业优化运营效率,实现智能化转型。
|
Java 关系型数据库 MySQL
JavaWeb基础第一章(MySQL数据库与JDBC)
JavaWeb基础第一章(MySQL数据库与JDBC)
|
存储 监控 安全
DOS 拒绝服务攻击及其预防和缓解方法
【8月更文挑战第20天】
1619 0
|
机器学习/深度学习 数据采集 人工智能
数据工作中的自动化与AI融合实践
【8月更文第13天】随着大数据和人工智能(AI)技术的发展,数据处理和分析变得越来越重要。本文将探讨如何通过自动化工具和AI技术来优化数据处理流程,包括数据清洗、特征工程、模型训练以及结果可视化等步骤。我们将使用Python编程语言及其相关库(如Pandas、Scikit-learn和TensorFlow)作为实现手段。
873 0
|
Web App开发 数据采集 Python
让ChromeDriver 125顺利运行:解决找不到chromedriver.exe的技巧
本文介绍了如何解决Selenium使用ChromeDriver时遇到的版本不匹配问题,以及如何设置环境变量。同时,文章提供了示例代码,展示如何在Python中配置Selenium使用代理IP、设定User-Agent和Cookie进行网页抓取,以提高爬虫的效率和成功率。确保ChromeDriver与Chrome浏览器版本一致,将`chromedriver.exe`添加到环境变量,然后使用`Options`和`Proxy`类配置代理和浏览器选项,最后通过`webdriver.Chrome()`启动浏览器并执行抓取任务。
1091 0
让ChromeDriver 125顺利运行:解决找不到chromedriver.exe的技巧
|
人工智能 API 开发者
【AI大模型应用开发】0.2 智谱AI API接入详细步骤和简单应用
【AI大模型应用开发】0.2 智谱AI API接入详细步骤和简单应用
2852 0
|
安全 关系型数据库 MySQL
MySQL的binlog日志和GTID
MySQL的binlog日志和GTID
658 1