[Oracle] Sequence 创建和引用时双引号处理不一致导致建表失败
- Dominant language
- Java
- Stars
- 50
- Forks
- 12
- Avg merge
- 2h 44m
- Merged PRs (30d)
- 1
Description
## 问题描述
在 Oracle 数据库中,当 Sequence 创建时使用双引号 " 包裹名称时,Oracle 会保留 Sequence 名称的大小写,并将其作为大小写敏感的对象名。
autoTable 当前在生成 Oracle DDL 时,创建 Sequence 使用了双引号,但在建表时引用 Sequence 没有使用双引号,导致 Oracle 将 Sequence 名称转换为大写,从而无法找到实际创建的 Sequence。
## 复现步骤
创建 Sequence:
CREATE SEQUENCE "auto_seq_XXL_JOB_LOG";
此时实际创建的 Sequence 名称为:
auto_seq_XXL_JOB_LOG
然后 autoTable 生成建表 SQL:
CREATE TABLE XXL_JOB_LO (
ID NUMBER DEFAULT auto_seq_XXL_JOB_LOG.NEXTVAL
);
Oracle 会将未加双引号的 auto_seq_XXL_JOB_LOG 按规则解析为:
AUTO_SEQ_XXL_JOB_LOG
因此找不到实际存在的:
"auto_seq_XXL_JOB_LOG"
最终导致建表失败。
## 建议
源码中OracleStrategy的createTable中创建序列使用了IStrategy.wrapIdentifiers包裹了,在元数据转sql时调用OracleHelper的formatDefaultValue生成列数据时没有使用IStrategy.wrapIdentifiers,两边统一下就行了。
Contributor guide
No contributing guide indexed for this repository
Research direction
Start in OracleStrategy.createTable and OracleHelper.formatDefaultValue, where the issue identifies inconsistent identifier wrapping for sequence creation and column defaults. Trace how both paths generate Oracle DDL, then make their quoting behavior consistent and verify that the generated CREATE TABLE SQL references the case-sensitive sequence correctly.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- databases
- Issue type
- Bug
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Activity status
- Active
- Clarity
- Clearly specified
- Newbie friendliness
- 82/100