2016-07-11 1 views
0

この質問は、aix 7.2のOracle 12.1.0.2に関するものです。oracle sql return count他の列と一緒に

私は5つのテーブルを持っていると私は、このクエリを実行したい:

select owner, table_name, LAST_DDL_TIME, count(*) 
from dba_objects 
where owner = 'WAREHOUSE' 
and OBJECT_NAME in ('table1','table2','table3','table4','table5') 
and OBJECT_TYPE = 'TABLE' 

私はselect句と5つのテーブルの実際のカウントで3列にしたいです。可能であれば、これを1つのクエリで実行したいと思います。

owner、table_name、LAST_DDL_TIMEでグループを追加すると、各行に1のカウントが返されます。

だから私はしたい私の結果セットは次のようになります。

OWNER  OBJECT_NAME  LAST_DDL_TIME   COUNT(*) 
SCHEMA1  TABLE1   7/9/2016 3:47:27 PM  5932158 
SCHEMA1  TABLE2   7/9/2016 3:47:31 PM  432 
SCHEMA1  TABLE3   7/9/2016 3:47:15 PM  958741 
SCHEMA1  TABLE4   7/9/2016 3:47:31 PM  11298 
SCHEMA1  TABLE5   7/9/2016 3:47:15 PM  3645873385 
+0

「実際の5つのテーブルの数」あなたは5を意味しますか?または、行数を探していますか? – ruudvan

+0

'owner = 'WAREHOUSE''でフィルタリングしている場合、なぜ出力に' owner'が必要ですか?また、統計情報が収集された最後の時点では、現在のカウント(*) - カウントが本当に必要ですか? – mathguy

+0

おおよその数だけが必要な場合は、 'dba_tab_statistics.num_rows'を使用できます。正確なカウントが必要な場合は、所有者とtable_nameがパラメータとして渡されたときに行数を返すSQL関数を記述できます。次に、選択した関数でSQL関数を呼び出します。 –

答えて

-1

ハック、唯一の平野SQLおよびハードコードされた所有者名とテーブル名を使用して、以下に示します。これは、組織内で1対1の要件でない限り、使用すべきではありません。

テストのために、私はマシン上のSYSスキーマ内にいくつかのテーブルとSYSを使用しました。これが役に立つとわかったら、あなたの状況に合わせて調整することができます。

with 
    counts (table_name, ct) as (
     select 'ACCESS$'     , count(*) from SYS.ACCESS$    union all 
     select 'ALERT_QT'    , count(*) from SYS.ALERT_QT    union all 
     select 'APPLY$_CHANGE_HANDLERS' , count(*) from SYS.APPLY$_CHANGE_HANDLERS union all 
     select 'APPLY$_CONF_HDLR_COLUMNS', count(*) from SYS.APPLY$_CONF_HDLR_COLUMNS 
    ) 
select o.owner, o.object_name, o.last_ddl_time, c.ct 
from dba_objects o 
     inner join 
     counts c 
     on o.object_name = c.table_name 
where o.object_type = 'TABLE' 
    and o.owner = 'SYS' 
; 


OWNER OBJECT_NAME    LAST_DDL_T   CT 
-------- ------------------------- ---------- ---------- 
SYS  ACCESS$     2014-05-29  34698 
SYS  ALERT_QT     2014-05-29   0 
SYS  APPLY$_CHANGE_HANDLERS 2014-05-29   0 
SYS  APPLY$_CONF_HDLR_COLUMNS 2014-05-29   0 
0

いくつかのXMLマジックを使用して、プレーンSQLクエリ内で動的SQLを実行できます。

select owner, object_name, LAST_DDL_TIME, 
     to_number(extractvalue(xmltype(dbms_xmlgen.getxml('select count(*) c from "'||owner||'"."'||object_name||'"')),'/ROWSET/ROW/C')) as count 
from dba_objects 
where owner = 'WAREHOUSE' 
and OBJECT_NAME in ('table1','table2','table3','table4','table5') 
and OBJECT_TYPE = 'TABLE' 
関連する問題