我曾尝试创建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表。