首页 文章

显示'dba_segments'错误的Oracle存储过程:表不存在[重复]

提问于
浏览
0

这个问题在这里已有答案:

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

CREATE OR REPLACE
PROCEDURE P_DAILY_ENTRY
IS
  an_job_id number;
BEGIN
    INSERT INTO table_space(table_name, max_size, date_of_max_size)
        SELECT table_name,
          TRUNC(SUM(bytes)/1024) max_size,
          sysdate date_of_max_size
        FROM
          (
          SELECT segment_name table_name, owner, bytes
          FROM dba_segments
          WHERE segment_type = 'TABLE'
          UNION ALL
          SELECT segment_name table_name, owner, bytes
          FROM dba_segments
          WHERE segment_type = 'INDEX'
          )
        WHERE owner IN ('CARAT')
        GROUP BY table_name, owner
        ORDER BY SUM(bytes) DESC;
    EXCEPTION WHEN OTHERS THEN
        ROLLBACK;
END P_DAILY_ENTRY;

我在运行上面的内容时显示以下两个错误:

  • 第05行|执行| PL / SQL:忽略SQL语句

  • 第12行|执行| PL / SQL:ORA00942:表或视图不存在

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

1 回答

  • 1

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

    ORA-00942 可以涵盖多种问题,一个常见的问题是如果你不能将表视为不存在的话(这是有道理的:许多oracle错误消息旨在阻止人们故意发现有关数据库设置的更多信息简洁) .

相关问题