Oracle解决动态数量相同表结构UNION ALL 创建视图

需要动态生成的SQL语句:

create or replace view myView
as
select col1, clo2 from HIS_YC_001 t
UNION ALL
select col1, col2 from HIS_YC_002 t 
....
/*******************************************************  
  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;

猜你喜欢

转载自blog.csdn.net/zuozewei/article/details/79666178
今日推荐