2013-05-20 50 views
0

請看下面的查詢。 DB:ORACLE處理entier DB以獲取數據

select table_name, column_name, data_type from all_tab_cols 
where 
data_type = 'DATE' and 
OWNER = 'OWNER_NAME' 

O/P:

TABLE_NAME COLUMN_NAME DATA_TYPE 
T1   C1   DATE 
T1   C2   DATE 
T2   C3   DATE 
T2   C4   DATE 

現在,我得到的結果非常完美。我想建立一個進一步處理的查詢。從結果來看,我想獲取table_name,column_name並在column_name上應用過濾器。

例子:

TABLE: T1 
C1   c2 
01-01-2001 01-01-2011 
02-02-1990 05-05-1700 
03-03-1753 10-10-1764 

像明智另一個表... 簡單地說,我想從數據庫中的所有列,其中日期字段少於特定逐年。我已經嘗試過,但無法做到。

+0

不知道你想要做什麼,但它聽起來像你需要[動態SQL](HTTP:/ /docs.oracle.com/cd/B28359_01/appdev.111/b28370/dynamic.htm) –

回答

3

我知道了..

這個查詢做它..

select table_name 
     , column_name 
     ,to_number(extractvalue(
     xmltype(dbms_xmlgen.getxml(
     'select count(*) c from '||owner||'.'||table_name ||' WHERE extract(year from ' || column_name || ') < 1753' 
     )) 
     ,'/ROWSET/ROW/C')) as count1 

from all_tab_cols 
where 
data_type = 'DATE' and 
OWNER = 'OWNER_NAME'