Oracle 物化视图的DBMS作业调度器

Oracle 物化视图的DBMS作业调度器,oracle,jobs,materialized-views,dbms-scheduler,Oracle,Jobs,Materialized Views,Dbms Scheduler,我一直试图安排每天晚上同时刷新三个物化视图。我使用了下面的代码 BEGIN DBMS_SCHEDULER.CREATE_JOB ( JOB_NAME => 'REFRESH_MVIEW', JOB_TYPE => 'PLSQL_BLOCK', JOB_ACTION => 'BEGIN DBMS_MVIEW.REFRESH("m_view1, m_view2, m_view3",''C''); END;', NUMB

我一直试图安排每天晚上同时刷新三个物化视图。我使用了下面的代码

BEGIN
DBMS_SCHEDULER.CREATE_JOB 
(
JOB_NAME            => 'REFRESH_MVIEW',
JOB_TYPE            => 'PLSQL_BLOCK',
JOB_ACTION          => 'BEGIN DBMS_MVIEW.REFRESH("m_view1, m_view2, m_view3",''C''); END;',
NUMBER_OF_ARGUMENTS => 0,
START_DATE          => SYSTIMESTAMP,
REPEAT_INTERVAL     => 'FREQ=DAILY; BYHOUR=0',
END_DATE            => NULL,
ENABLED             => TRUE,
AUTO_DROP           => FALSE,
COMMENTS            => 'JOB TO REFRESH'
);
END;
但是在作业运行之后,我得到以下错误

ORA-12012:自动执行作业57179时出错 ORA-06550:第ORA-06550行:第1行,第495列: PLS-00114:标识符“m_view1,m_view2”太长 ,专栏:

我知道过程名称中有30个字符的限制。那么,这是否意味着我必须将工作分成3个不同的工作?你能告诉我哪里出了问题吗

提前谢谢

你能告诉我哪里出了问题吗

试着这样写你的陈述:

BEGIN DBMS_MVIEW.REFRESH(''m_view1,m_view2,m_view3'',''C'')

视图列表是使用字符串指定的——因此使用单引号。我不知道视图列表中的空格是否相关。毫无疑问,我也把它们拿走了

请注意,在第一种情况下,对于后面的两个视图,您有一个默认刷新。如果需要对所有视图进行完全刷新,则必须指定CCC作为刷新方法


请参见

谢谢,我将尝试一下并发布结果。我已将第二个命令与“CCC”一起使用。双引号(
)用于分隔标识符-但是,在您的情况下,您希望传递字符串文字,因此将使用单引号(
)。因为它位于另一个字符串中,所以需要对其进行转义(
),但使用新的引号语法通常更容易,例如,
q'[开始DBMS\u MVIEW.REFRESH('m\u view1,m\u view2,m\u view3','C');结束;]
BEGIN DBMS_MVIEW.REFRESH(''m_view1,m_view2,m_view3'',''CCC'')