之前有人是這樣設計的,沒有用表磁區來弄,就是有一張系統日志表 sys_log (當前月的資料)以前的資料以日期命名表來分表。
sys_log_201802.....sys_log_201801.................... sys_log_201712
現在我想實作用一個視圖把這些所有的表union 起來,但是后面這些表還會增加,有沒有什么辦法可以時行判斷有這個表就加進去。?求助各位大俠。。
uj5u.com熱心網友回復:
用job 定時查詢 然后insert 到一張表。或者用物化視圖看看能不能行
uj5u.com熱心網友回復:
或者考慮用動態sql,根據你的日期條件,拼接對應的日志表。uj5u.com熱心網友回復:

這個動態SQL怎么寫?
uj5u.com熱心網友回復:
/*******************************************************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;
uj5u.com熱心網友回復:
這個問題搞定了沒?
uj5u.com熱心網友回復:
這個是采樣表,你是哪里的。。。uj5u.com熱心網友回復:
模糊查詢表名,再用回圈可以嗎uj5u.com熱心網友回復:
提示一個思路吧,以下內容,應該可以獲取所有您需要的表。然后用動態SQL實作。也可能需要用管道函式。SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME LIKE 'SYS_LOG%'
uj5u.com熱心網友回復:
觸發器咯
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/26374.html
標籤:開發
