From e62f546a95413adb33254d33c0113d16855bbe3a Mon Sep 17 00:00:00 2001 From: hekaiyu <13673834656@163.com> Date: Wed, 12 Nov 2025 11:48:43 +0800 Subject: [PATCH] =?UTF-8?q?oracle=E8=A1=A8=E7=BB=93=E6=9E=84=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E5=88=B0oracle=20=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/StasSyncStrategyServiceImpl.java | 114 ++++++++++++++++-- 1 file changed, 106 insertions(+), 8 deletions(-) diff --git a/jeecg-module-sync/src/main/java/org/jeecg/stasSyncStrategy/service/impl/StasSyncStrategyServiceImpl.java b/jeecg-module-sync/src/main/java/org/jeecg/stasSyncStrategy/service/impl/StasSyncStrategyServiceImpl.java index 9417379..7c5a5a3 100644 --- a/jeecg-module-sync/src/main/java/org/jeecg/stasSyncStrategy/service/impl/StasSyncStrategyServiceImpl.java +++ b/jeecg-module-sync/src/main/java/org/jeecg/stasSyncStrategy/service/impl/StasSyncStrategyServiceImpl.java @@ -136,7 +136,7 @@ public class StasSyncStrategyServiceImpl extends ServiceImpl 0) { + // 数字类型:NUMBER(p,s), NUMERIC(p,s) 等 + ddl.append("(").append(dataPrecision); + if (dataScale > 0) { + ddl.append(",").append(dataScale); + } + ddl.append(")"); + } else if (dataLength > 0 && + ("VARCHAR2".equalsIgnoreCase(dataType) || + "CHAR".equalsIgnoreCase(dataType) || + "NVARCHAR2".equalsIgnoreCase(dataType) || + "NCHAR".equalsIgnoreCase(dataType) || + "RAW".equalsIgnoreCase(dataType))) { + // 字符类型和RAW类型 + ddl.append("(").append(dataLength).append(")"); + } else if ("DATE".equalsIgnoreCase(dataType) || + "CLOB".equalsIgnoreCase(dataType) || + "BLOB".equalsIgnoreCase(dataType) || + "LONG".equalsIgnoreCase(dataType) || + "FLOAT".equalsIgnoreCase(dataType)) { + // 这些类型不需要长度/精度信息 + // 什么也不做 + } else { + // 其他可能需要长度的类型 + ddl.append("(").append(dataLength).append(")"); + } + + ddl.append(isNullable); + first = false; + } + } + + // 获取主键信息 + ResultSet primaryKeys = metaData.getPrimaryKeys(null, sourceOwner.toUpperCase(), tableName.toUpperCase()); + List pkColumns = new ArrayList<>(); + + while (primaryKeys.next()) { + // 主键列名也用双引号括起来 + pkColumns.add("\"" + primaryKeys.getString("COLUMN_NAME") + "\""); + } + primaryKeys.close(); + + if (!pkColumns.isEmpty()) { + ddl.append(",\n PRIMARY KEY ("); + ddl.append(String.join(", ", pkColumns)); + ddl.append(")"); + } + + // 移除末尾的分号,只保留右括号 + ddl.append("\n)"); + + return ddl.toString(); + } catch (SQLException e) { + throw new RuntimeException("生成表DDL失败: " + e.getMessage(), e); } } /** * 生成从Oracle到PostgreSQL的建表语句 */ - private static String generatePgCreateTableFromOracle(Connection conn, String sourceOwner, + private String generatePgCreateTableFromOracle(Connection conn, String sourceOwner, String targetOwner, String tableName) throws SQLException { StringBuilder sqlBuilder = new StringBuilder(); //模式名称 @@ -236,7 +334,7 @@ public class StasSyncStrategyServiceImpl extends ServiceImpl 0 ? length : 255) + ")"; @@ -284,7 +382,7 @@ public class StasSyncStrategyServiceImpl extends ServiceImpl