ORA-01424: missing or illegal character following the escape character

本文介绍了一种在使用MyEclipse生成Hibernate映射文件时遇到的ORA-01424错误解决方案。该错误与Oracle数据库回收站有关。通过查询回收站并清除其中的内容可以解决这一问题。

MyEclispe 生成hibernate mapping files ,refresh 的时候报

ORA-01424: missing or illegal character following the escape character 错误。

 

在网上google了一下,发现是oracle recyclebin搞的鬼,按照已经有的办法

SQL> select object_name from user_recyclebin;

 

OBJECT_NAME
------------------------------
BIN$PvG8uWMHqdHgQAB/AQBO8Q==$0
BIN$PjmFUCSsVwLgQAB/AQA7CA==$0
BIN$PjmFUCSrVwLgQAB/AQA7CA==$0
BIN$PjmFUCSqVwLgQAB/AQA7CA==$0
.....

手工清空回收站:
SQL> purge recyclebin;

重新middlegen,一切ok!

### ORA-00922: missing or invalid option 错误的解决方法 ORA-00922 是 Oracle 数据库中常见的错误,通常表示在 SQL 语句中使用了不支持或无效的选项。该错误可能出现在建表、修改表、创建索引、定义存储参数、使用特殊语法结构(如 `RESULT_CACHE`)等操作中。 --- ### 常见场景与解决方法 #### 1. 建表时使用 `RESULT_CACHE` 引发错误 在 Oracle 11.2 中,如果尝试在建表语句中使用 `RESULT_CACHE (MODE DEFAULT)` 选项,并且数据库版本或配置不支持该特性,则会触发 ORA-00922 错误。此功能通常用于缓存查询结果,但在某些版本或升级后的数据库中可能不被识别。 解决方法是移除该选项或确认数据库版本是否支持该功能: ```sql -- 错误示例 CREATE TABLE employees ( id NUMBER PRIMARY KEY, name VARCHAR2(100) ) RESULT_CACHE (MODE DEFAULT); -- 正确写法(移除不支持的选项) CREATE TABLE employees ( id NUMBER PRIMARY KEY, name VARCHAR2(100) ); ``` 此错误也可能出现在通过 OGG(Oracle GoldenGate)同步建表语句时,若目标数据库不支持某些特性,应手动调整 SQL 脚本[^3]。 --- #### 2. 定义列或存储子句时使用非法选项 ORA-00922 错误也常出现在定义列或存储参数时使用了不被允许的选项。例如,在 `CREATE TABLE` 或 `ALTER TABLE` 语句中错误地使用了某些存储参数或约束定义。 例如: ```sql -- 错误示例 CREATE TABLE test ( id NUMBER STORAGE (INITIAL 10M) ); -- 正确写法取决于实际需求和数据库支持的存储参数 ``` 建议查阅 Oracle 官方文档,确认当前数据库版本支持的存储参数和语法结构。 --- #### 3. 使用 SQL*Plus 脚本读取输入参数时语法错误 当在 SQL*Plus 脚本中使用变量(如 `&start_date`)从键盘读取输入,并在 `SELECT` 查询中使用这些变量进行日期范围判断时,如果变量未正确格式化或拼接方式有误,也可能导致 ORA-00922 错误。 例如: ```sql -- 错误示例 SELECT * FROM orders WHERE order_date BETWEEN '&start_date' AND '&end_date'; ``` 若输入的日期格式与数据库期望的格式不一致,或未使用 `TO_DATE` 显式转换,可能导致解析失败。推荐写法如下: ```sql -- 推荐写法 SELECT * FROM orders WHERE order_date BETWEEN TO_DATE('&start_date', 'YYYY-MM-DD') AND TO_DATE('&end_date', 'YYYY-MM-DD'); ``` 确保用户输入的格式与 `TO_DATE` 的格式匹配,避免隐式转换带来的问题[^2]。 --- #### 4. 数据库版本升级后兼容性问题 在数据库从旧版本(如 10g)升级到 11.2 后,部分旧语法或参数可能不再被支持。可以通过查询 `DBA_REGISTRY_HISTORY` 来确认数据库是否是升级而来,并检查是否存在兼容性问题: ```sql SELECT * FROM DBA_REGISTRY_HISTORY; ``` 若发现某些组件未正确升级或存在“INVALIDATE”操作,应重新应用补丁或调整建表语句以适配当前版本[^3]。 --- ### 最佳实践建议 - 避免在 SQL 语句中使用非标准或特定版本的特性。 - 在脚本中使用变量时,应配合 `TO_DATE`、`TO_CHAR` 等函数确保数据格式正确。 - 使用 `DBA_REGISTRY_HISTORY` 查看数据库升级历史,判断是否因版本差异导致语法问题。 - 对于复杂的 DDL 操作,建议在测试环境中先行验证。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值