mirror of
https://gitee.com/dromara/mayfly-go
synced 2025-11-02 07:20:24 +08:00
@@ -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