2015-07-28 65 views
0

我有一个查询,它在高水位标记上方显示Oracle数据库数据文件可用空间,并且我想在结尾处显示“总计”字段,和“FreeSize(Mb)”列的总和。我只能在像下面这样的单独列中这样做:在单个字段而不是单独的列中添加列查询结果

sum((bytes/1024/1024) - ceil((nvl(hwm,1)* (size_db_block))/1024/1024)) OVER() "Total" 

如何在单个字段中显示此内容?谢谢。

SELECT 'alter database datafile '''||file_name||''' resize '|| 
    DECODE(trunc(ceil((nvl(hwm,1)*(size_db_block))/1024/1024) /10),0 ,10, ceil((nvl(hwm,1)* (size_db_block))/1024/1024)) ||'M;' "Resize Command", 
    AUTOEXTENSIBLE , bytes/1024/1024 "CurrentSize(Mb)" , 
    ((bytes/1024/1024) - ceil((nvl(hwm,1)* (size_db_block))/1024/1024)) "FreeSize(Mb)", sum((bytes/1024/1024) - ceil((nvl(hwm,1)* (size_db_block))/1024/1024)) OVER() "Total" 
FROM dba_data_files a, 
    (SELECT file_id, max(block_id+blocks-1) AS hwm FROM dba_extents GROUP BY file_id) b, 
    (SELECT TO_NUMBER(value) AS size_db_block FROM v$parameter WHERE name = 'db_block_size') c 
WHERE a.file_id = b.file_id(+) AND AUTOEXTENSIBLE='YES' 
AND ceil(blocks*(c.size_db_block)/1024/1024)- ceil((nvl(hwm,1)*(c.size_db_block))/1024/1024) > 10 
ORDER BY "FreeSize(Mb)"; 

电流输出:

Resize Command CurrentSize(Mb) FreeSize(Mb)  Total 
------------------------------ ------------ ---------- 
datafile 1     830   38  617 
datafile 2     100   65  617 
datafile 3     100   80  617 
datafile 4     100   80  617 
datafile 5     390   354  617 

但我希望它显示:

Resize Command CurrentSize(Mb) FreeSize(Mb) 
------------------------------ ------------ 
datafile 1     830   38 
datafile 2     100   65 
datafile 3     100   80 
datafile 4     100   80 
datafile 5     390   354 
           Total: 617 
+3

能否请你清理查询!这是不可读的。 – idmean

+0

已编辑。我尽力而为。我没有自己开发整个查询。我不是一个SQL大师,所以我不知道什么可以“清理”。 – XerX

+0

究竟是什么问题?你得到多行吗?你想使用在后续计算中返回的数字吗? – gordatron

回答

1

您添加为输出什么是不可能的RDBMS条款。您需要一种报告工具才能以该格式显示。如果你纯粹想在工具(SQL +或蟾蜍)中显示,你可以做的是在你的输出中增加一个额外的行,它将保存Free Size(总Free Free Size)的总和值。

SELECT 'alter database datafile '''||file_name||''' resize '|| 
    DECODE(trunc(ceil((nvl(hwm,1)*(size_db_block))/1024/1024) /10),0 ,10, ceil((nvl(hwm,1)* (size_db_block))/1024/1024)) ||'M;' "Resize Command", 
    AUTOEXTENSIBLE , bytes/1024/1024 "CurrentSize(Mb)" , 
    ((bytes/1024/1024) - ceil((nvl(hwm,1)* (size_db_block))/1024/1024)) "FreeSize(Mb)" 

FROM dba_data_files a, 
    (SELECT file_id, max(block_id+blocks-1) AS hwm FROM dba_extents GROUP BY file_id) b, 
    (SELECT TO_NUMBER(value) AS size_db_block FROM v$parameter WHERE name = 'db_block_size') c 
WHERE a.file_id = b.file_id(+) AND AUTOEXTENSIBLE='YES' 
AND ceil(blocks*(c.size_db_block)/1024/1024)- ceil((nvl(hwm,1)*(c.size_db_block))/1024/1024) > 10 
ORDER BY "FreeSize(Mb)" 

UNION 


SELECT 'Total Free Size', AUTOEXTENSIBLE , 
    '', 
    sum((bytes/1024/1024) - ceil((nvl(hwm,1)* (size_db_block))/1024/1024)) OVER() "Total" 
FROM dba_data_files a, 
    (SELECT file_id, max(block_id+blocks-1) AS hwm FROM dba_extents GROUP BY file_id) b, 
    (SELECT TO_NUMBER(value) AS size_db_block FROM v$parameter WHERE name = 'db_block_size') c 
WHERE a.file_id = b.file_id(+) AND AUTOEXTENSIBLE='YES' 
AND ceil(blocks*(c.size_db_block)/1024/1024)- ceil((nvl(hwm,1)*(c.size_db_block))/1024/1024) > 10 
ORDER BY "FreeSize(Mb)"; 
+0

第11行出现错误ERROR:ORA-00933:SQL命令未正确结束。我清除了代码中的空行,“;” “union all”前的符号和第一个“from”前的逗号。 – XerX

+0

已编辑。现在试试。 – SouravA

+0

SP2-0042:未知命令“UNION ALL” - 忽略行的其余部分。并只显示查询的第二部分。有趣的是,如果我删除空行,那么代码根本不会运行。 – XerX

相关问题