将select语句的结果插入到Oracle存储过程中的另一个表中

将select语句的结果插入到Oracle存储过程中的另一个表中,oracle,select,stored-procedures,plsql,insert-into,Oracle,Select,Stored Procedures,Plsql,Insert Into,我想使用以下存储过程将数据插入到一个表中,该表包含有关表空间可用空间的信息 只使用INSERT INTO语句而不使用过程编译可以很好地工作,但不管我如何编译过程,它都不工作 下面是示例存储过程: CREATE OR REPLACE PROCEDURE INSERTSPACEINFO( TABLESPACE_NAME IN SPACEINFO.TABLESPACE_NAME%TYPE, TSIZE IN SPACEINFO.TSIZE%TYPE, FREE

我想使用以下存储过程将数据插入到一个表中,该表包含有关表空间可用空间的信息

只使用INSERT INTO语句而不使用过程编译可以很好地工作,但不管我如何编译过程,它都不工作

下面是示例存储过程:

CREATE OR REPLACE PROCEDURE INSERTSPACEINFO(
       TABLESPACE_NAME IN SPACEINFO.TABLESPACE_NAME%TYPE,
       TSIZE IN SPACEINFO.TSIZE%TYPE,
       FREESIZE IN SPACEINFO.FREESIZE%TYPE,
       SYSDATE IN SPACEINFO.INSERT_DATE%TYPE)


IS
BEGIN  

INSERT into SYS.Spaceinfo (TABLESPACE_NAME, TSIZE, FREESIZE, INSERT_DATE)
(SELECT
  df.tablespace_name AS "Tablespace",
  df.bytes / (1024 * 1024 * 1024) AS "TSIZE",
  Trunc(fs.bytes / (1024 * 1024 * 1024)) AS "FREESIZE",
  SYSDATE
FROM (
  SELECT tablespace_name
    ,Sum(bytes) AS bytes
  FROM dba_free_space
  GROUP BY tablespace_name
  ) fs,
  (
    SELECT tablespace_name,
    SUM(bytes) AS bytes
    FROM dba_data_files
    GROUP BY tablespace_name
    ) df,
    dual

WHERE fs.tablespace_name = df.tablespace_name);

COMMIT;
END;

有编译时错误吗?欢迎使用。你的代码对我有用。如果它对您不起作用,可能是因为您没有在编辑之间编译或重新编译该过程。顺便说一句,您可能希望将此代码发送到。我建议您在SYS以外的模式中创建对象。@J Versler,有什么错误吗?嗨!我的SYS.Spaceinfo表有问题。过程已成功编译,但没有数据写入表中。这个表中的所有列类型都是varchar2(20)。不允许使用系统保留字,例如
SYSDATE
(您将其用作参数)。2.您声明此过程的模式是什么?(它是否有SYS.Spaceinfo的同义词)我问,因为您在Spaceinfo.TABLESPACE\u NAME%TYPE中使用了例如
TABLESPACE\u NAME
,它应该在同一架构中具有读取权限或同义词(如果不是,只需在SYS.SPACEINFO.TABLESPACE\u NAME%TYPE中将其声明为
TABLESPACE\u NAME
.3。此过程不需要输入参数。4.*无例外。