0

我确实尝试在oracle 10g数据库中创建一个存储过程,该过程从另一个表中选择数据dba_segments并插入到另一个表(即 table_space)中。

创建或替换
程序 P_DAILY_ENTRY
是
  an_job_id 编号;
开始
    插入表空间(表名,最大尺寸,日期最大尺寸)
        选择表名,
          TRUNC(SUM(字节)/1024) 最大尺寸,
          sysdate date_of_max_size
        从
          (
          选择段名表名,所有者,字节
          FROM dba_segments
          WHERE segment_type = 'TABLE'
          联合所有
          选择段名表名,所有者,字节
          FROM dba_segments
          WHERE segment_type = '索引'
          )
        所有者在哪里(“克拉”)
        GROUP BY 表名,所有者
        ORDER BY SUM(bytes) DESC;
    其他情况除外
        回滚;
结束 P_DAILY_ENTRY;

当我运行上面它显示以下两个错误:

  • 第 05 行 | 执行 | PL/SQL:忽略 SQL 语句
  • 第 12 行 | 执行 | PL/SQL: ORA00942: 表或视图不存在

但是,如果INSERT单独执行语句,它会填充table_space表。

4

1 回答 1

1

这很可能是一个权限问题,因为INSERT您可以执行的 s 不一定是过程所有者可以执行的命令(这与 Oracle 中的 Invoker/Definer 权限体系结构有关)。

ORA-00942可以涵盖许多问题,一个常见的问题是如果您无法“看到”该表,则该表被视为不存在(这是有道理的:许多 oracle 错误消息旨在阻止人们通过以下方式了解有关数据库设置的更多信息)故意简洁)。

于 2013-11-06T14:20:05.167 回答