2016-02-22 78 views
-1

我試圖在Oracle中存儲此代碼,並且每次出現編譯錯誤。我搜索關於沒有參數的存儲過程,我沒有找到解決這個問題的解決方案。 這裏是我想要存儲的過程:試圖在Oracle 11g中存儲過程以監視表空間存儲

CREATE OR REPLACE PROCEDURE Espacio_libre 
    BEGIN 
    select df.tablespace_name "Tablespace", 
    totalusedspace "MB Usados", 
    (df.totalspace - tu.totalusedspace) "MB Libres", 
    df.totalspace "MB Totales", 
    round(100 * ((df.totalspace - tu.totalusedspace)/ df.totalspace)) 
    "Pct Libre" 
    from 
    (select tablespace_name, 
    round(sum(bytes)/1048576) TotalSpace 
    from dba_data_files 
    group by tablespace_name) df, 
    (select round(sum(bytes)/(1024*1024)) totalusedspace, tablespace_name 
    from dba_segments 
    group by tablespace_name) tu 
    where df.tablespace_name = tu.tablespace_name; 
    END Espacio_libre; 

/

謝謝你們。

+0

由於「厄爾尼諾瓦利德Oubaha」之稱的 - 你不能沒有INTO子句中使用的PL/SQL塊選擇。 –

回答

0
create GLOBAL TEMPORARY table test22jan16 (tablespace_name varchar2(100),MB_Libres varchar2(100),MB_Totales varchar2(100),Pct_Libre varchar2(100)) 
ON COMMIT DELETE ROWS; 

insert into test22jan16 
    select df.tablespace_name , 
    (df.totalspace - tu.totalusedspace), 
    df.totalspace, 
    round(100 * ((df.totalspace - tu.totalusedspace)/ df.totalspace)) 
    from 
    (select tablespace_name, 
    round(sum(bytes)/1048576) TotalSpace 
    from dba_data_files 
    group by tablespace_name) df, 
    (select round(sum(bytes)/(1024*1024)) totalusedspace, tablespace_name 
    from dba_segments 
    group by tablespace_name) tu 
    where df.tablespace_name = tu.tablespace_name; 

創建一個全局臨時表存儲的數據,然後使用上面的查詢

+0

爲什麼GTT會提供幫助?這不會提供任何額外的。 – Ben

+0

我以爲他想存儲數據並使用它提供報告。但是,這也可以在不使用GTT的情況下完成 – Sandeep

0

將數據存儲在該表中創建一個視圖,它會做你是從這個過程期待什麼。

不能在沒有INTO子句和變量的PL/SQL塊中擁有select語句。

您還可以創建一個指針爲OUT放慢參數