尝试在Oracle 11g中存储过程以监视表空间存储

时间:2016-02-22 10:50:28

标签: sql oracle stored-procedures oracle11g

我试图将此代码存储在Oracle中,每次出现编译错误时。我搜索没有参数的存储过程,我没有找到解决方案来解决这个问题。 以下是我试图存储的程序:

    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;

/

谢谢你们。

3 个答案:

答案 0 :(得分:0)

在oracle中创建存储过程时,您使用的是PL / SQL代码而不是SQL。 pl / SQL中的表中没有选择列[column] 您必须从表格#39;中选择列到变量中。 请参阅下面的文档以了解PL / SQL编程的基础知识。 [https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/selectinto_statement.htm][1]

答案 1 :(得分: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;

创建一个全局临时表,该表存储数据,然后使用上述查询

将数据存储在此表中

答案 2 :(得分:0)

创建一个视图,它将完成您对此过程的期望。

不能在没有INTO子句和变量的PL / SQL块中使用select语句。

您还可以将Refcursor创建为OUT参数