fix-mysql-procedures-query-and-dm-table-ddl-query

This commit is contained in:
zgq
2024-04-12 19:41:59 +08:00
parent 6e9c4e0cd7
commit 2edc405288
2 changed files with 26 additions and 23 deletions

View File

@ -33,28 +33,31 @@ public class DMMetaData extends DefaultMetaService implements MetaData {
return "\"" + tableName + "\"";
}
private static String tableDDL = "SELECT dbms_metadata.get_ddl('TABLE', '%s','%s') as ddl FROM dual ;";
private static String tableComment = "select COMMENTS from dba_tab_comments where OWNER='%s' and TABLE_TYPE='TABLE' and TABLE_NAME='%s';";
private static String columnComment = "SELECT COLNAME,COMMENT$ FROM SYS.SYSCOLUMNCOMMENTS where SCHNAME = '%s' and TVNAME = '%s' and TABLE_TYPE = 'TABLE';";
public String tableDDL(Connection connection, String databaseName, String schemaName, String tableName) {
String sql = """
SELECT
(SELECT comments FROM user_tab_comments WHERE table_name = '%s') AS comments,
(SELECT dbms_metadata.get_ddl('TABLE', '%s', '%s') FROM dual) AS ddl
FROM dual;
""";
String tableDDLSql = String.format(tableDDL, tableName, schemaName);
String tableCommentSql = String.format(tableComment, schemaName, tableName);
String columnCommentSql = String.format(columnComment, schemaName, tableName);
StringBuilder ddlBuilder = new StringBuilder();
String tableDDLSql = String.format(sql, tableName, tableName, schemaName);
SQLExecutor.getInstance().execute(connection, tableDDLSql, resultSet -> {
if (resultSet.next()) {
String ddl = resultSet.getString("ddl");
String comment = resultSet.getString("comments");
if (StringUtils.isNotBlank(comment)) {
ddlBuilder.append(ddl).append("\n").append("COMMENT ON TABLE ").append(format(schemaName))
.append(".").append(format(tableName)).append(" IS ").append("'").append(comment).append("';");
ddlBuilder.append(ddl).append("\n");
}
});
SQLExecutor.getInstance().execute(connection, tableCommentSql, resultSet -> {
if (resultSet.next()) {
String comments = resultSet.getString("COMMENTS");
if (Objects.nonNull(comments)) {
ddlBuilder.append("COMMENT ON TABLE ").append(format(schemaName)).append(".").append(format(tableName))
.append(" IS ").append(comments).append(";").append("\n");
}
}
});
String columnCommentsSql =String.format("select COLNAME,COMMENT$ from SYS.SYSCOLUMNCOMMENTS\n" +
"where SCHNAME = '%s' and TVNAME = '%s'and TABLE_TYPE = 'TABLE';", schemaName,tableName);
SQLExecutor.getInstance().execute(connection, columnCommentsSql, resultSet->{
SQLExecutor.getInstance().execute(connection, columnCommentSql, resultSet -> {
while (resultSet.next()) {
String columnName = resultSet.getString("COLNAME");
String comment = resultSet.getString("COMMENT$");

View File

@ -125,8 +125,8 @@ public class MysqlMetaData extends DefaultMetaService implements MetaData {
String sql = "SHOW PROCEDURE STATUS WHERE Db = DATABASE()";
return SQLExecutor.getInstance().execute(connection, sql, resultSet -> {
ArrayList<Procedure> procedures = new ArrayList<>();
Procedure procedure = new Procedure();
while (resultSet.next()){
Procedure procedure = new Procedure();
procedure.setProcedureName(resultSet.getString("Name"));
procedures.add(procedure);
}