这篇文章主要围绕在Spring数据存储库中刷新Oracle物化视图和oracle物化视图实时刷新展开,旨在为您提供一份详细的参考资料。我们将全面介绍在Spring数据存储库中刷新Oracle物化视图的
这篇文章主要围绕在Spring数据存储库中刷新Oracle物化视图和oracle物化视图实时刷新展开,旨在为您提供一份详细的参考资料。我们将全面介绍在Spring数据存储库中刷新Oracle物化视图的优缺点,解答oracle物化视图实时刷新的相关问题,同时也会为您带来mysql触发器实现oracle物化视图示例代码、oracle – 创建新的物化视图,而不清除物化视图日志、oracle – 创建物化视图,每天刷新记录、oracle – 物化视图 – 识别最后一次刷新的实用方法。
本文目录一览:- 在Spring数据存储库中刷新Oracle物化视图(oracle物化视图实时刷新)
- mysql触发器实现oracle物化视图示例代码
- oracle – 创建新的物化视图,而不清除物化视图日志
- oracle – 创建物化视图,每天刷新记录
- oracle – 物化视图 – 识别最后一次刷新
在Spring数据存储库中刷新Oracle物化视图(oracle物化视图实时刷新)
在查询Spring Data
Repository之前,我需要刷新Oracle数据库中的实例化视图。我正在尝试通过存储库中的函数使用本机查询来执行此操作,如下所示。
@Query("BEGIN DBMS_SNAPSHOT.REFRESH(''MY_VIEW'', ''C''); END;", nativeQuery = true)fun refreshMaterializedView()
但是,java.lang.NegativeArraySizeException
尽管在直接在数据库上运行时它可以正常工作,但我在调用此方法时却遇到了麻烦。我在这里做错了什么?是否有其他方法可以强制实例化视图刷新?
答案1
小编典典您需要使用注释您的方法@Modifying
。它确实适用于DML语句,但也适用于此。
@Modifying@Query("BEGIN DBMS_SNAPSHOT.REFRESH(''MY_VIEW'', ''C''); END;", nativeQuery = true)fun refreshMaterializedView()
mysql触发器实现oracle物化视图示例代码
oracle数据库支持物化视图--不是基于基表的虚表,而是根据表实际存在的实表,即物化视图的数据存储在非易失的存储设备上。
下面实验创建ON COMMIT 的FAST刷新模式,在MysqL中用触发器实现insert,update,delete 刷新操作
1、基础表创建,Orders 表为基表,Order_mv为物化视图表
MysqL> create table Orders(
-> order_id int not null auto_increment,
-> product_name varchar(30)not null,
-> price decimal(10,0) not null,
-> amount smallint not null,
-> primary key (order_id));
Query OK,0 rows affected
MysqL> create table Order_mv(
-> product_name varchar(30) not null,
-> price_sum decimal(8.2) not null,
-> amount_sum int not null,
-> price_avg float not null,
-> order_cnt int not null,
-> unique index(product_name));
Query OK,0 rows affected
2、insert触发器
delimiter $$
create trigger tgr_Orders_insert
after insert on Orders
for each row
begin
set @old_price_sum=0;
set @old_amount_sum=0;
set @old_price_avg=0;
set @old_orders_cnt=0;
select ifnull(price_sum,0),ifnull(amount_sum,ifnull(price_avg,ifnull(order_cnt,0)
from Order_mv
where product_name=new.product_name
into @old_price_sum,@old_amount_sum,@old_price_avg,@old_orders_cnt;
set @new_price_sum=@old_price_sum+new.price;
set @new_amount_sum=@old_amount_sum+new.amount;
set @new_orders_cnt=@old_orders_cnt+1;
set @new_price_avg=@new_price_sum/@new_orders_cnt;
replace into Order_mv
values(new.product_name,@new_price_sum,@new_amount_sum,@new_price_avg,@new_orders_cnt);
end;
$$
delimiter ;