摘自:http://blog.sina.com.cn/s/blog_70a2bdb80100pqid.html
- 使用Oracle 10g 新特性flashback query來查詢過去修改並已提交的記錄時,遇到以下錯誤:
- SQL> select employee_id, salary from hr.employees
as of timestamp(to_timestamp('08-MAR-11 04.15.00','DD-MON-YY HH24.MI.SS'))
2 3 ;
select employee_id, salary from hr.employees
*
ERROR at line 1:
ORA-01466: unable to read data - table definition has changed - 根據官方文檔所提示,所查詢的表其結構在flashback查詢之前已被修改。 即使用flashback query指定回退查詢的時間點在該表當前結構之前。
- ORA-01466: unable to read data - table definition has changed
Cause: Query parsed after tbl (or index) change, and executed w/old snapshot
Action: commit (or rollback) transaction, and re-execute
在發生錯誤的SQL代碼中排錯後發現,要flashback query的時間點08-MAR-11 04.15.00,其實是下午04點。而後面的日期格式'DD-MON-YY HH24.MI.SS'中小時格式(HH24)採用的是二十四小時制,所以正確寫法應該如下:
to_timestamp('08-MAR-11 16.15.00','DD-MON-YY HH24.MI.SS')
發生錯誤是因為04.15.00那一刻,hr.employees表還沒有創建,產生ORA-01466錯誤。所謂細節體現功底。