2015-07-28 145 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

相關問題