使用視圖快速獲得Flashback Query閃回查詢數(shù)據(jù)
本文給出使用視圖協(xié)助我們快速構(gòu)造閃回查詢內(nèi)容,通過視圖可以方便的檢索“歷史上的數(shù)據(jù)”。
1.構(gòu)造閃回查詢視圖需求描述
1)準(zhǔn)備員工表和工資表
2)刪除工資表中雇傭年限在1994年之前的記錄
3)創(chuàng)建視圖可以查詢工資表刪除之前的記錄
2.準(zhǔn)備環(huán)境
1)準(zhǔn)備員工表和工資表
- sec@ora10g> create table emp (id number,name varchar2(20), e_date date);
- Table created.
- sec@ora10g> create table salary (id number, salary number);
- Table created.
emp表包含員工ID、員工名字和雇傭時(shí)間信息;
salary表中包含員工ID和薪水信息。
2)初始化數(shù)據(jù)
- insert into emp values (1,'Secooler',to_date('1991-01-01','yyyy-mm-dd'));
- insert into emp values (2,'Andy',to_date('1992-01-01','yyyy-mm-dd'));
- insert into emp values (3,'HOU',to_date('2010-01-01','yyyy-mm-dd'));
- insert into emp values (4,'Shengwen',to_date('2011-01-01','yyyy-mm-dd'));
- commit;
- insert into salary values (1,60000);
- insert into salary values (2,50000);
- insert into salary values (3,40000);
- insert into salary values (4,30000);
- commit;
3)獲取初始化數(shù)據(jù)內(nèi)容
- sec@ora10g> select * from emp;
- ID NAME E_DATE
- ---------- ------------------------------ -----------------
- 1 Secooler 19910101 00:00:00
- 2 Andy 19920101 00:00:00
- 3 HOU 20100101 00:00:00
- 4 Shengwen 20110101 00:00:00
- sec@ora10g> select * from salary;
- ID SALARY
- ---------- ----------
- 1 60000
- 2 50000
- 3 40000
- 4 30000
3.為構(gòu)造后續(xù)的閃回查詢查詢當(dāng)前的時(shí)間和SCN號
1)查詢當(dāng)前時(shí)間
- sec@ora10g> select sysdate from dual;
- SYSDATE
- -----------------
- 20110809 21:34:11
- 2)查詢當(dāng)前系統(tǒng)SCN號
- sec@ora10g> select dbms_flashback.get_system_change_number from dual;
- GET_SYSTEM_CHANGE_NUMBER
- ------------------------
- 3141326
4.刪除工資表中雇傭年限在1994年之前的記錄
- sec@ora10g> delete from salary where id in ( select id from emp where e_date < to_date('1994','yyyy'));
- 2 rows deleted.
- sec@ora10g> commit;
- Commit complete.
- sec@ora10g> select * from emp;
- ID NAME E_DATE
- ---------- ------------------------------ -----------------
- 1 Secooler 19910101 00:00:00
- 2 Andy 19920101 00:00:00
- 3 HOU 20100101 00:00:00
- 4 Shengwen 20110101 00:00:00
- sec@ora10g> select * from salary;
- ID SALARY
- ---------- ----------
- 3 40000
- 4 30000
此時(shí),在salary表中1994年之前的員工信息已經(jīng)被刪除,并且數(shù)據(jù)修改已經(jīng)提交。
5.兩種方法創(chuàng)建視圖構(gòu)造閃回查詢刪除之前的數(shù)據(jù)
1)***種方法:使用時(shí)間戳來構(gòu)造閃回查詢視圖
- sec@ora10g> create view v_salary_timestamp as select * from salary as of timestamp to_timestamp('2011-08-09 21:34:11','YYYY-MM-DD HH24:MI:SS');
- View created.
2)第二種方法:使用SCN構(gòu)造閃回查詢視圖
- sec@ora10g> create view v_salary_scn as select * from salary as of scn 3141326;
- View created.
6.使用視圖獲取閃回查詢數(shù)據(jù)
- sec@ora10g> select * from v_salary_timestamp;
- ID SALARY
- ---------- ----------
- 1 60000
- 2 50000
- 3 40000
- 4 30000
- sec@ora10g> select * from v_salary_scn;
- ID SALARY
- ---------- ----------
- 1 60000
- 2 50000
- 3 40000
- 4 30000
到此,兩種構(gòu)造視圖的方法都順利的獲得了閃回查詢的數(shù)據(jù)。順利的完成任務(wù)。
7.小結(jié)
Oracle的閃回查詢功能本身的能耐自不必多說。使用視圖將閃回查詢語句進(jìn)行一次“封裝”后,我們便得到了另外一種直觀的便利。