在把Oracle迁移至达梦后,对比源端和目的端对象,有时会发现达梦比oracle多出很多表,或者在查询达梦数据库表数量或表名的时候,发现
select * from user_tables;
查出来的表数量与实际的表数量不一致,存在个别表名并非真正的表的情况,这些表在管理工具的模式下是看不到的。
出现这种情况的原因主要是由于以下几种情况:
BM$_+位图索引对象id
SREF_CON_TAB+外键约束id+_LEVEL
SREF_CON_TAB+外键约束id+_REFING
SREF_CON_TAB+外键约束id+_REFED
CTI$+全文索引名+$I
CTI$+全文索引名+$P
CTI$+全文索引名+$D
CTI$+全文索引名+$N
因此,查询达梦数据库的实际的表可以使用以下SQL:
--查看指定模式的所有表名
SELECT
NAME
FROM
SYSOBJECTS
WHERE
SCHID =
(
SELECT ID FROM SYSOBJECTS WHERE TYPE$='SCH' AND NAME ='模式名'
)
AND TYPE$ ='SCHOBJ'
AND SUBTYPE$='UTAB'
AND NAME NOT LIKE 'CTI%'
AND NAME NOT LIKE 'SREF_CON_TAB%'
AND NAME NOT LIKE 'BM$';
--查看指定模式的所有表数量
SELECT
COUNT(*)
FROM
SYSOBJECTS
WHERE
SCHID =
(
SELECT ID FROM SYSOBJECTS WHERE TYPE$='SCH' AND NAME ='模式名'
)
AND TYPE$ ='SCHOBJ'
AND SUBTYPE$='UTAB'
AND NAME NOT LIKE 'CTI%'
AND NAME NOT LIKE 'SREF_CON_TAB%'
AND NAME NOT LIKE 'BM$';
--查看指定模式的所有表名
SELECT
NAME
FROM
SYSOBJECTS
WHERE
SCHID =
(
SELECT ID FROM SYSOBJECTS WHERE TYPE$='SCH' AND NAME ='模式名'
)
AND TYPE$ ='SCHOBJ'
AND SUBTYPE$='UTAB'
AND NAME NOT LIKE 'CTI%'
AND NAME NOT LIKE 'SREF_CON_TAB%'
AND NAME NOT LIKE 'BM$';
--查看指定模式的所有表数量
SELECT
COUNT(*)
FROM
SYSOBJECTS
WHERE
SCHID =
(
SELECT ID FROM SYSOBJECTS WHERE TYPE$='SCH' AND NAME ='模式名'
)
AND TYPE$ ='SCHOBJ'
AND SUBTYPE$='UTAB'
AND NAME NOT LIKE 'CTI%'
AND NAME NOT LIKE 'SREF_CON_TAB%'
AND NAME NOT LIKE 'BM$';
文章
阅读量
获赞