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