这个问题在这里已有答案:
我确实尝试在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 回答
这很可能是权限问题,因为您可以执行的
INSERT
不一定是过程所有者可以执行的命令(这与Oracle中的Invoker / Definer权限体系结构有关) .ORA-00942
可以涵盖多种问题,一个常见的问题是如果你不能将表视为不存在的话(这是有道理的:许多oracle错误消息旨在阻止人们故意发现有关数据库设置的更多信息简洁) .