
# U0100029: 目标数据库不支持 MaterializedViewRefreshClause
#### 描述
GaussDB 不支持 MaterializedView 自动刷新。
**数据库类型与版本**
- 源库类型与版本：UGO 支持的 Oracle 版本。
- 目标库类型与版本：UGO 支持的 GaussDB 版本。
**语法示例**
Oracle脚本：
```
CREATE MATERIALIZED VIEW mv_hourly_sales
REFRESH FAST
START WITH SYSDATE NEXT SYSDATE + 1/24
AS
SELECT product_id, SUM(quantity) total_quantity, SUM(amount) total_amount
FROM sales
GROUP BY product_id;
```
#### 改造建议
1、首先物化视图依赖的表存储模式必须是Astore;
2、注释掉 MATERIALIZED VIEW LOG
3、UGO转换配置项-物化视图中的REFRESH-选择注释物化视图中的REFRESH子句
4、然后创建一个PROCEDURE定时刷新物化视图
5、最后创建定时任务，定时任务包含两种方式：
方式1（推荐）：DBE_SCHEDULER.CREATE_JOB
方式2：dbe_task.id_submit
GaussDB改写后的脚本：
```
---物化视图注释掉自动刷新 
CREATE MATERIALIZED VIEW mv_hourly_sales
/*REFRESH FAST
START WITH SYSDATE NEXT SYSDATE + 1/24*/ 
AS
SELECT product_id, SUM(quantity) total_quantity, SUM(amount) total_amount
FROM sales
GROUP BY product_id;
---创建一个PROCEDURE定时刷新物化视图
CREATE OR REPLACE PROCEDURE refresh_mv_hourly_sales
AS
BEGIN
    REFRESH MATERIALIZED VIEW mv_hourly_sales;
    RAISE NOTICE 'Materialized view mv_hourly_sales refreshed at %', now();
END;
/
--方法1：使用DBE_SCHEDULER.CREATE_JOB创建定时任务
BEGIN 
PERFORM DBE_SCHEDULER.CREATE_JOB('MY_JOB',
job_type=>'PLSQL_BLOCK', job_action=>
'BEGIN refresh_mv_hourly_sales; END;'
, number_of_arguments=>0,
start_date=>sysdate, 
repeat_interval=> 
 'FREQ=HOURLY; INTERVAL=1', 
end_date=>NULL,
job_class=>'DEFAULT_JOB_CLASS', 
enabled=>TRUE, 
auto_drop=>TRUE,comments=>
NULL
);
END; 
/
--方法2：使用dbe_task.id_submit创建定时任务
call dbe_task.id_submit(100,'call refresh_mv_hourly_sales(); ', sysdate, 'interval ''1 hour''');
```
