dromara / dromara/auto-table

[Oracle] Sequence 创建和引用时双引号处理不一致导致建表失败

Open Beginner friendly
#12 1 comment 2 reactions 0 assignees View on GitHub
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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.