17,089
社区成员
发帖
与我相关
我的任务
分享
-- 在 1# 的基础上编辑的
-- 1 。游标的参数,加一个数据类型
-- 2。SQLERRM 先赋给一个变量
CREATE OR REPLACE PROCEDURE autodrop_askpart IS
i_rowcount NUMBER;
i_error VARCHAR2(500);
CURSOR c_job(p_rowcount varchar2) IS
SELECT partition_name
FROM all_tab_partitions
WHERE table_name = 'TRACE_BASE_INFO_ASK'
AND partition_name LIKE 'SYS_%'
AND rownum <= (p_rowcount - 5);
c_row c_job%ROWTYPE;
BEGIN
SELECT COUNT(1)
INTO i_rowcount
FROM all_tab_partitions
WHERE table_name = 'TRACE_BASE_INFO_ASK'
AND partition_name LIKE 'SYS_%';
IF i_rowcount > 5 THEN
BEGIN
OPEN c_job(i_rowcount);
LOOP
FETCH c_job
INTO c_row;
EXIT WHEN c_job%NOTFOUND;
BEGIN
EXECUTE IMMEDIATE 'alter table TRACE_BASE_INFO_ASK drop partition ' ||
c_row.partition_name;
EXCEPTION
WHEN OTHERS THEN
i_error:= SQLERRM;
INSERT INTO exptable
(exptext)
select i_error from dual ;
END;
END LOOP;
CLOSE c_job;
END;
END IF;
END;
CREATE OR REPLACE PROCEDURE system.autodrop_askpart IS
i_rowcount NUMBER;
CURSOR c_job(p_rowcount) IS
SELECT partition_name
FROM all_tab_partitions
WHERE table_name = 'TRACE_BASE_INFO_ASK'
AND partition_name LIKE 'SYS_%'
AND rownum <= (p_rowcount - 5);
c_row c_job%ROWTYPE;
BEGIN
SELECT COUNT(1)
INTO i_rowcount
FROM all_tab_partitions
WHERE table_name = 'TRACE_BASE_INFO_ASK'
AND partition_name LIKE 'SYS_%';
IF i_rowcount > 5 THEN
BEGIN
OPEN c_job(i_rowcount);
LOOP
FETCH c_job
INTO c_row;
EXIT WHEN c_job%NOTFOUND;
BEGIN
EXECUTE IMMEDIATE 'alter table TRACE_BASE_INFO_ASK drop partition ' ||
c_row.partition_name;
EXCEPTION
WHEN OTHERS THEN
INSERT INTO exptable
(exptext)
VALUES
(SQLERRM);
END;
END LOOP;
CLOSE c_job;
END;
END IF;
END;