mirror of
				https://gitee.com/dromara/mayfly-go
				synced 2025-11-04 08:20:25 +08:00 
			
		
		
		
	fix: 达梦数据库ddl
This commit is contained in:
		@@ -58,6 +58,11 @@ func (pd *DMDialect) GetDbNames() ([]string, error) {
 | 
			
		||||
 | 
			
		||||
// 获取表基础元信息, 如表名等
 | 
			
		||||
func (pd *DMDialect) GetTables() ([]Table, error) {
 | 
			
		||||
 | 
			
		||||
	// 首先执行更新统计信息sql 这个统计信息在数据量比较大的时候就比较耗时,所以最好定时执行
 | 
			
		||||
	// _, _, err := pd.dc.Query("dbms_stats.GATHER_SCHEMA_stats(SELECT SF_GET_SCHEMA_NAME_BY_ID(CURRENT_SCHID))")
 | 
			
		||||
 | 
			
		||||
	// 查询表信息
 | 
			
		||||
	_, res, err := pd.dc.Query(GetLocalSql(DM_META_FILE, DM_TABLE_INFO_KEY))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
@@ -69,9 +74,9 @@ func (pd *DMDialect) GetTables() ([]Table, error) {
 | 
			
		||||
			TableName:    re["TABLE_NAME"].(string),
 | 
			
		||||
			TableComment: anyx.ConvString(re["TABLE_COMMENT"]),
 | 
			
		||||
			CreateTime:   anyx.ConvString(re["CREATE_TIME"]),
 | 
			
		||||
			TableRows:    anyx.ConvInt(re["tableRows"]),
 | 
			
		||||
			TableRows:    anyx.ConvInt(re["TABLE_ROWS"]),
 | 
			
		||||
			DataLength:   anyx.ConvInt64(re["DATA_LENGTH"]),
 | 
			
		||||
			IndexLength:  anyx.ConvInt64(re["indexLength"]),
 | 
			
		||||
			IndexLength:  anyx.ConvInt64(re["INDEX_LENGTH"]),
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
	return tables, nil
 | 
			
		||||
@@ -176,30 +181,54 @@ func (pd *DMDialect) GetCreateTableDdl(tableName string) (string, error) {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 表注释
 | 
			
		||||
	_, res, err = pd.dc.Query(fmt.Sprintf("select COMMENTS from USER_TAB_COMMENTS where TABLE_TYPE='TABLE' and TABLE_NAME = '%s'", tableName))
 | 
			
		||||
	_, res, err = pd.dc.Query(fmt.Sprintf(`
 | 
			
		||||
			select OWNER, COMMENTS from DBA_TAB_COMMENTS where TABLE_TYPE='TABLE' and TABLE_NAME = '%s'
 | 
			
		||||
		    and owner = (SELECT SF_GET_SCHEMA_NAME_BY_ID(CURRENT_SCHID))
 | 
			
		||||
			                                      `, tableName))
 | 
			
		||||
	if res != nil {
 | 
			
		||||
		for _, re := range res {
 | 
			
		||||
			// COMMENT ON TABLE "SYS_MENU" IS '菜单表';
 | 
			
		||||
			tableComment := fmt.Sprintf("\n\nCOMMENT ON TABLE \"%s\" IS '%s';\n", tableName, re["COMMENTS"].(string))
 | 
			
		||||
			builder.WriteString(tableComment)
 | 
			
		||||
			if re["COMMENTS"] != nil {
 | 
			
		||||
				tableComment := fmt.Sprintf("\n\nCOMMENT ON TABLE \"%s\".\"%s\" IS '%s';", re["OWNER"].(string), tableName, re["COMMENTS"].(string))
 | 
			
		||||
				builder.WriteString(tableComment)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 字段注释
 | 
			
		||||
	fieldSql := fmt.Sprintf(`
 | 
			
		||||
		SELECT COLUMN_NAME, COMMENTS
 | 
			
		||||
		SELECT OWNER, COLUMN_NAME, COMMENTS
 | 
			
		||||
		FROM USER_COL_COMMENTS
 | 
			
		||||
		WHERE OWNER = (SELECT SF_GET_SCHEMA_NAME_BY_ID(CURRENT_SCHID))
 | 
			
		||||
		  AND TABLE_NAME = '%s'
 | 
			
		||||
		`, tableName)
 | 
			
		||||
	_, res, err = pd.dc.Query(fieldSql)
 | 
			
		||||
	if res != nil {
 | 
			
		||||
		builder.WriteString("\n")
 | 
			
		||||
		for _, re := range res {
 | 
			
		||||
			// COMMENT ON COLUMN "SYS_MENU"."BIZ_CODE" IS '业务编码,应用编码1';
 | 
			
		||||
			fieldComment := fmt.Sprintf("\nCOMMENT ON COLUMN \"%s\".\"%s\" IS '%s';", tableName, re["COLUMN_NAME"].(string), re["COMMENTS"].(string))
 | 
			
		||||
			builder.WriteString(fieldComment)
 | 
			
		||||
			if re["COMMENTS"] != nil {
 | 
			
		||||
				fieldComment := fmt.Sprintf("\nCOMMENT ON COLUMN \"%s\".\"%s\".\"%s\" IS '%s';", re["OWNER"].(string), tableName, re["COLUMN_NAME"].(string), re["COMMENTS"].(string))
 | 
			
		||||
				builder.WriteString(fieldComment)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 索引信息
 | 
			
		||||
	indexSql := fmt.Sprintf(`
 | 
			
		||||
		select indexdef(b.object_id,1) as INDEX_DEF from DBA_INDEXES a
 | 
			
		||||
		join dba_objects b on a.owner = b.owner and b.object_name = a.index_name and b.object_type = 'INDEX'
 | 
			
		||||
		where a.owner = (SELECT SF_GET_SCHEMA_NAME_BY_ID(CURRENT_SCHID))
 | 
			
		||||
		and a.table_name = '%s' 
 | 
			
		||||
		and indexdef(b.object_id,1) != '禁止查看系统定义的索引信息'
 | 
			
		||||
	`, tableName)
 | 
			
		||||
	_, res, err = pd.dc.Query(indexSql)
 | 
			
		||||
	if res != nil {
 | 
			
		||||
		for _, re := range res {
 | 
			
		||||
			builder.WriteString("\n\n" + re["INDEX_DEF"].(string))
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return builder.String(), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -4,15 +4,31 @@ select
 | 
			
		||||
from dba_objects
 | 
			
		||||
---------------------------------------
 | 
			
		||||
--DM_TABLE_INFO 表详细信息
 | 
			
		||||
select
 | 
			
		||||
    a.object_name as TABLE_NAME,
 | 
			
		||||
    b.comments as TABLE_COMMENT,
 | 
			
		||||
    a.created as CREATE_TIME,
 | 
			
		||||
    TABLE_USED_SPACE((SELECT SF_GET_SCHEMA_NAME_BY_ID(CURRENT_SCHID)), a.object_name)*page() as DATA_LENGTH
 | 
			
		||||
from dba_objects a
 | 
			
		||||
         LEFT JOIN DBA_TAB_COMMENTS b ON b.TABLE_TYPE='TABLE' and a.object_name = b.TABLE_NAME and b.owner = a.owner
 | 
			
		||||
where a.owner = (SELECT SF_GET_SCHEMA_NAME_BY_ID(CURRENT_SCHID))
 | 
			
		||||
  and a.object_type = 'TABLE' and a.status = 'VALID'
 | 
			
		||||
SELECT a.object_name                                      as TABLE_NAME,
 | 
			
		||||
       b.comments                                         as TABLE_COMMENT,
 | 
			
		||||
       a.created                                          as CREATE_TIME,
 | 
			
		||||
       TABLE_USED_SPACE(
 | 
			
		||||
               (SELECT SF_GET_SCHEMA_NAME_BY_ID(CURRENT_SCHID)),
 | 
			
		||||
               a.object_name
 | 
			
		||||
       ) * page()                                         as DATA_LENGTH,
 | 
			
		||||
       (SELECT sum(INDEX_USED_PAGES(id))* page()
 | 
			
		||||
        FROM SYSOBJECTS
 | 
			
		||||
        WHERE NAME IN (SELECT INDEX_NAME
 | 
			
		||||
                       FROM DBA_INDEXES
 | 
			
		||||
                       WHERE OWNER = 'wxb'
 | 
			
		||||
                         AND TABLE_NAME = a.object_name)) as INDEX_LENGTH,
 | 
			
		||||
       c.num_rows                                         as TABLE_ROWS
 | 
			
		||||
 | 
			
		||||
FROM dba_objects a
 | 
			
		||||
         LEFT JOIN DBA_TAB_COMMENTS b ON b.TABLE_TYPE = 'TABLE'
 | 
			
		||||
    AND a.object_name = b.TABLE_NAME
 | 
			
		||||
    AND b.owner = a.owner
 | 
			
		||||
         LEFT JOIN (SELECT a.owner, a.table_name, a.num_rows FROM dba_tables a) c
 | 
			
		||||
                   ON c.owner = a.owner AND c.table_name = a.object_name
 | 
			
		||||
 | 
			
		||||
WHERE a.owner = (SELECT SF_GET_SCHEMA_NAME_BY_ID(CURRENT_SCHID))
 | 
			
		||||
  AND a.object_type = 'TABLE'
 | 
			
		||||
  AND a.status = 'VALID'
 | 
			
		||||
---------------------------------------
 | 
			
		||||
--DM_INDEX_INFO 表索引信息
 | 
			
		||||
select
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user