2017-05-29 51 views
0

我有以下腳本來計算特定所有者的每個表的所有行。它完美的作品。 然而,一些表有一個名爲「老字號」和其他不... 我現在的腳本不考慮特定的列,如果此列存在與否:SQL Oracle - 如果一個特定列存在,所有表的不同計數

DECLARE 
val NUMBER; 
BEGIN 
FOR I IN (SELECT table_name FROM all_tables where owner='myowner') LOOP 
EXECUTE IMMEDIATE 'SELECT count(*) FROM myowner.' || i.table_name INTO val; 
DBMS_OUTPUT.PUT_LINE(i.table_name || ';' || val); 
END LOOP; 
END; 

所以我想什麼添加如下: 如果OLD列存在,則在OLD = 0(其中OLD = 0)時將其考慮在內,如果不存在,則在不考慮此列的情況下繼續執行「正常」計數。 希望我已經清楚了;)

非常感謝!

一個例子: 讓我們說我有2個表:

Table1 - columns A B C with the following data: 
1 "test" "Steve" 
2 "test2" "George" 
Table2 - columns E F G OLD with the following data: 
1 "test3" "Martin" 0 
2 "test4" "Lucas" 0 
3 "test5" "Marley" 0 
4 "test6" "Bob" 55 

結果應該然後是:

表1; 2 - >有沒有 '老' 欄,所以我做一個simples計數 ,其返回2

表2; 3 - >有「老」柱所以我提出的計數,其中OLD = 0 和它返回然後3

+0

咦?不明白。請用數據顯示一個例子。 – OldProgrammer

+0

讓我們說我有2個表: '表1 - 列ABC數據如下: 1「測試」「史蒂夫」 2「測試2」「喬治」 表2 - 列EFG OLD數據如下: 1「 TEST3" 「馬丁」 0 2 「TEST4」 「盧卡斯」 0 3 「TEST5」 「馬利」 0 4 「TEST6」, 「鮑勃」 55' 結果應該是然後: 表1; 2 - >有被而不是'OLD'列,所以我做了一個簡單的計數,返回2 Table2; 3 - >有'OLD'列,所以我做了一個計數,其中OLD = 0,然後返回3 – Thiago

+0

PLease編輯問題並把樣本放入問題文本。評論中很難閱讀。謝謝。 – OldProgrammer

回答

0

嘗試:

DECLARE 
    val NUMBER; 
BEGIN 
FOR I IN (
    select a.table_name, c.column_name 
    from all_tables a 
    left join all_tab_cols c 
    ON a.owner = c.owner and a.table_name = c.table_name and c.column_name = 'OLD' 
    where a.owner = 'MYOWNER' 
) 
LOOP 
    IF i.column_name IS NULL THEN 
     EXECUTE IMMEDIATE 'SELECT count(*) FROM MYOWNER.' || i.table_name INTO val; 
    ELSE 
     EXECUTE IMMEDIATE 'SELECT count(*) FROM MYOWNER.' || i.table_name 
          || ' WHERE old = 0' INTO val; 
    END IF; 
    DBMS_OUTPUT.PUT_LINE(i.table_name || ';' || val); 
END LOOP; 
END; 
相關問題