如何在oracle中查找表的架构名称
我应该在这个给定的查询中添加什么来获取表的模式名如何在oracle中查找表的架构名称,oracle,Oracle,我应该在这个给定的查询中添加什么来获取表的模式名 SELECT DS.TABLESPACE_NAME AS schema_name, SEGMENT_NAME AS table_name, a.num_rows AS row_count, ROUND(SUM(DS.BYTES) * 8 * 1024) AS total_space_bytes, ROUND(SUM(DS.BYTES) * 8) AS total_space_kilobytes, ROUND(
SELECT DS.TABLESPACE_NAME AS schema_name,
SEGMENT_NAME AS table_name,
a.num_rows AS row_count,
ROUND(SUM(DS.BYTES) * 8 * 1024) AS total_space_bytes,
ROUND(SUM(DS.BYTES) * 8) AS total_space_kilobytes,
ROUND(SUM(DS.BYTES) / (1024/1000)) AS total_space_megabytes,
CASE WHEN a.partitioned='NO' THEN 0 WHEN a.partitioned='YES'THEN 1 ELSE
0 END AS is_table_partitioned
FROM DBA_SEGMENTS
DS JOIN (SELECT table_name,tablespace_name,owner,num_rows,partitioned
FROM all_tables)a ON a.table_name=DS.SEGMENT_NAME AND
DS.TABLESPACE_NAME = a.tablespace_name
WHERE
segment_type='TABLE' AND SEGMENT_NAME IN (SELECT TABLE_NAME FROM
DBA_TABLES)
GROUP BY DS.TABLESPACE_NAME,
SEGMENT_NAME,a.num_rows,a.partitioned ORDER BY SEGMENT_NAME
添加
dba_segments.owner
列(不要忘记将其也包括在groupby
子句中):
谢谢,它正在工作,不客气。“选择DS.TABLESPACE\u NAME作为schema\u NAME”是非常误导人的。表空间名称绝对不是架构名称。“schema name”只是表/段的所有者。给定的TS可以很好地拥有属于多个所有者/模式的段。
SELECT ds.tablespace_name AS schema_name,
ds.owner, --> this
segment_name AS table_name,
a.num_rows AS row_count,
ROUND (SUM (ds.bytes) * 8 * 1024) AS total_space_bytes,
ROUND (SUM (ds.bytes) * 8) AS total_space_kilobytes,
ROUND (SUM (ds.bytes) / (1024 / 1000)) AS total_space_megabytes,
CASE
WHEN a.partitioned = 'NO' THEN 0
WHEN a.partitioned = 'YES' THEN 1
ELSE 0
END AS is_table_partitioned
FROM dba_segments ds
JOIN
(SELECT table_name,
tablespace_name,
owner,
num_rows,
partitioned
FROM all_tables) a
ON a.table_name = ds.segment_name
AND ds.tablespace_name = a.tablespace_name
WHERE segment_type = 'TABLE'
AND segment_name IN (SELECT table_name FROM dba_tables)
GROUP BY ds.owner,
ds.tablespace_name,
segment_name,
a.num_rows,
a.partitioned
ORDER BY segment_name