之前有人是这样设计的,没有用表分区来弄,就是有一张系统日志表 sys_log (当前月的数据)以前的数据以日期命名表来分表。
sys_log_201802.....sys_log_201801.................... sys_log_201712
现在我想实现用一个视图把这些所有的表union 起来,但是后面这些表还会增加,有没有什么办法可以时行判断有这个表就加进去。?求助各位大侠。。
sys_log_201802.....sys_log_201801.................... sys_log_201712
现在我想实现用一个视图把这些所有的表union 起来,但是后面这些表还会增加,有没有什么办法可以时行判断有这个表就加进去。?求助各位大侠。。
或者用物化视图看看能不能行
author:zuozewei
time :2018/03/22
功能:抽取当前所有'HIS_YC_'前缀表指定列建立视图
eg:exec bulid_his_hc_view();
********************************************************/
create or replace procedure bulid_his_hc_view is
v_viewname varchar2(50);
v_sql varchar2(500); --视图名称变量
l_query long;
l_query_1 long;
l_query_SQL long; --创建SQL语句变量
begin
v_viewname := 'view_yc_tables'; --定义视图名称
v_sql := 'create or replace view ' || v_viewname || ' as ';
for x in (select u.table_name from user_tables u where u.table_name like 'HIS_YC_%') --循环取出当前所有表名
loop
--拼接SQL语句
l_query := l_query ||' UNION ALL SELECT OCCUR_TIME 产生时间,TO_CHAR(OCCUR_TIME / (60 * 60 * 24) + TO_DATE(''1970-01-01 08:00:00'',''YYYY-MM-DD HH24:MI:SS''),''YYYY-MM-DD'') 日期,''GK''||DEV_ID 关口编号,DEV_ID 电能表编号,IA_VALUE A相电流,UA_VALUE A相电压,IB_VALUE B相电流,UB_VALUE B相电压,IC_VALUE C相电流,UC_VALUE C相电压,FACTOR_VALUE 功率因数 FROM ' ||x.table_name || '';
end loop;
l_query_1 := substr(l_query, 11);
l_query_SQL := v_sql || l_query_1;
--打印拼接SQL
dbms_output.put_line(l_query_SQL);
--执行SQL
execute immediate l_query_SQL;
commit;
end bulid_his_hc_view;
SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME LIKE 'SYS_LOG%'