【问题标题】:DBMS Job scheduler for materialized view物化视图的 DBMS 作业调度程序
【发布时间】:2015-01-14 08:39:20
【问题描述】:

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

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 个不同的工作?你能告诉我哪里出错了吗?

提前致谢!

【问题讨论】:

  • 双引号 (") 用于分隔标识符 - 但是,在您的情况下,您想要传递字符串文字,因此您将使用单引号 (')。由于它在另一个字符串中,您需要将它们转义(''),但使用新的引号语法通常更容易,例如q'[BEGIN DBMS_MVIEW.REFRESH('m_view1, m_view2, m_view3','C'); END;]'

标签: oracle jobs materialized-views dbms-scheduler


【解决方案1】:

你能告诉我哪里出错了吗?

试着这样写你的陈述:

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

或者

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

查看列表使用字符串指定——所以使用单引号。我不知道视图列表中的空格是否相关。有疑问,我也删除了它们。

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

见https://docs.oracle.com/cd/A97630_01/server.920/a96568/rarmviea.htm#94135

【讨论】:

  • 谢谢,我会试一试并发布结果。我已将第二个命令与 ''CCC'' 一起使用。
猜你喜欢
  • 2017-03-22
  • 2019-03-04
  • 1970-01-01
  • 1970-01-01
  • 2021-09-27
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多