我对编程有点新意,所以感谢任何帮助。
在下面找到我的存储过程的代码以删除表,并创建一个每小时运行一次的DBA作业。
CREATE OR REPLACE procedure DELETE_My_TABLE(myschema varchar2) as
BEGIN
BEGIN
execute immediate 'delete from '||myschema||'.mytable where clause;';
END;
BEGIN
DBMS_SCHEDULER.create_program (
program_name => 'DELETE_My_TABLE',
program_type => 'STORED_PROCEDURE',
program_action => 'execute DELETE_My_TABLE(myschema)',
number_of_arguments => 1,
enabled => FALSE,
comments => 'Program to delete table using a stored procedure.');
DBMS_SCHEDULER.define_program_argument (
program_name => 'DELETE_My_TABLE',
argument_name => 'myschema',
argument_position => 1,
argument_type => 'VARCHAR2',
default_value => 'myschema');
DBMS_SCHEDULER.enable (name => 'DELETE_My_TABLE');
END;
BEGIN
DBMS_SCHEDULER.create_schedule (
schedule_name => 'DELETE_My_TABLE',
start_date => SYSTIMESTAMP,
repeat_interval => 'freq=hourly; byminute=0',
end_date => NULL,
comments => 'Hourly Job to purge SEARCH_TEMP_TABLE');
END;
END;
/
的问题:
ERROR at line 1:
ORA-00920: invalid relational operator
ORA-06512: at "MYSCHEMA.DELETE_My_TABLE", line 4
ORA-06512: at line 1
逻辑(和语法)是否有效?
答案 0 :(得分:2)
我可以看到的一个问题是你需要从EXECUTE IMMEDIATE字符串中取出分号:
execute immediate 'delete from '||myschema||'.mytable where clause';
^^
Removed from here
以为我怀疑这不能解决你的问题,这看起来像是你的BEGIN ... END块。
答案 1 :(得分:2)
对于Oracle Scheduler,您通常会创建一个程序。接下来,您将创建一个将程序作为操作的作业。您可以为该作业提供类似于您在代码中指定的计划,但您必须选择。您可以创建一个计划并让作业使用它,也可以给它自己的重复间隔作业。
我碰巧知道我写的一本书(Mastering Oracle Scheduler)可能非常有帮助。