我是 Oracle 作业脚本的新手。我编写了一些清除程序来清除所有旧数据并保留最近 3 个月的数据...程序成功执行。当我手动调用时它也可以工作。程序如下:
CREATE OR REPLACE PROCEDURE Archive
IS
v_query varchar2(2048);
v_tablename VARCHAR2(50);
v_condition varchar2(50);
TYPE cur_typ IS REF CURSOR;
c cur_typ;
BEGIN
OPEN c for 'select tablename,columnname from pseb.purge_tables';
FETCH c INTO v_tablename,v_condition;
LOOP
EXIT WHEN c%NOTFOUND;
if(v_tablename ='cfw.DCTBLPERFCUMULATIVEMASTER') then
v_query:='delete from cfw.DCTBLPERFDCUMULATIVEB3MAINREG where cumulativeid in (select cumulativeid FROM '|| v_tablename || ' WHERE ' || v_condition||' < sysdate-90';
execute immediate v_query;
v_query:='delete from cfw.DCTBLPERFDCUMULATIVEB4TODENERG where cumulativeid in (select cumulativeid FROM '|| v_tablename || ' WHERE ' || v_condition||' < sysdate-90';
execute immediate v_query;
v_query:='delete from cfw.DCTBLPERDFCUMULATIVEB5MAXDEMAN where cumulativeid in (select cumulativeid FROM '|| v_tablename || ' WHERE ' || v_condition||' < sysdate-90';
execute immediate v_query;
v_query:='delete from cfw.DCTBLPERFDCUMULATIVEB6TODREG where cumulativeid in (select cumulativeid FROM '|| v_tablename || ' WHERE ' || v_condition||' < sysdate-90';
execute immediate v_query;
v_query:='delete from cfw.DCTBLPERFDCUMULATIVEB7MAXDEMAN where cumulativeid in (select cumulativeid FROM '|| v_tablename || ' WHERE ' || v_condition||' < sysdate-90';
execute immediate v_query;
v_query:='delete from cfw.DCTBLPERFDCUMULATIVEB8MAXDEMAN where cumulativeid in (select cumulativeid FROM '|| v_tablename || ' WHERE ' || v_condition||' < sysdate-90';
execute immediate v_query;
v_query:='delete FROM '|| v_tablename || ' WHERE ' || v_condition||' < sysdate-90';
execute immediate v_query;
else
begin
v_query:='delete FROM '|| v_tablename || ' WHERE ' || v_condition||' < sysdate-90';
execute immediate v_query;
end;
end if;
FETCH c INTO v_tablename,v_condition;
end LOOP;
close c;
END; --Procedure
我的 JOb 脚本如下:
begin
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'purgeproc_automation',
job_type => 'STORED_PROCEDURE',
job_action => 'call pseb.archive();',
repeat_interval => 'FREQ=DAILY;INTERVAL=2', /* every other day */
auto_drop => false,
enabled => true,
comments => 'My new job');
end;
/
作业创建成功,但作业状态为 failed , not succeed 。背后的原因是什么?它返回以下错误:
ORA-06550: line 1, column 728:
PLS-00103: Encountered the symbol "PSEB" when expecting one of the following:
:= . ( @ % ;
The symbol ":=" was substituted for "PSEB" to continue.
请指导我解决这个问题...