Interestingly the definition for xxx_TAB_STATISTICS explicitly contains in the definition:
and bitand(t.property, 1) = 0 /* not a typed table */
so I assume there is a reason for that, but I've asked the PM for that if its just an erroneous omission.
You can still get a fair degree of stats information from the other dictionary views
SQL> create type myobj as object ( x int, y int );
2 /
Type created.
SQL> create table t of myobj;
Table created.
SQL>
SQL> insert into t
2 select myobj(rownum,rownum)
3 from dual connect by level <= 10;
10 rows created.
SQL>
SQL> commit;
Commit complete.
SQL> exec dbms_stats.gather_table_stats('','T');
PL/SQL procedure successfully completed.
SQL>
SQL> select *
2 from user_object_tables
3 where table_name = 'T'
4 @pr
==============================
TABLE_NAME : T
TABLESPACE_NAME : USERS
CLUSTER_NAME :
IOT_NAME :
STATUS : VALID
PCT_FREE : 10
PCT_USED :
INI_TRANS : 1
MAX_TRANS : 255
INITIAL_EXTENT : 65536
NEXT_EXTENT : 1048576
MIN_EXTENTS : 1
MAX_EXTENTS : 2147483645
PCT_INCREASE :
FREELISTS :
FREELIST_GROUPS :
LOGGING : YES
BACKED_UP : N
NUM_ROWS : 10
BLOCKS : 5
EMPTY_BLOCKS : 0
AVG_SPACE : 0
CHAIN_CNT : 0
AVG_ROW_LEN : 23
AVG_SPACE_FREELIST_BLOCKS : 0
NUM_FREELIST_BLOCKS : 0
DEGREE : 1
INSTANCES : 1
CACHE : N
TABLE_LOCK : ENABLED
SAMPLE_SIZE : 10
LAST_ANALYZED : 17-DEC-18
PARTITIONED : NO
IOT_TYPE :
OBJECT_ID_TYPE : SYSTEM GENERATED
TABLE_TYPE_OWNER : MCDONAC
TABLE_TYPE : MYOBJ
TEMPORARY : N
SECONDARY : N
NESTED : NO
BUFFER_POOL : DEFAULT
FLASH_CACHE : DEFAULT
CELL_FLASH_CACHE : DEFAULT
ROW_MOVEMENT : DISABLED
GLOBAL_STATS : YES
USER_STATS : NO
DURATION :
SKIP_CORRUPT : DISABLED
MONITORING : YES
CLUSTER_OWNER :
DEPENDENCIES : DISABLED
COMPRESSION : DISABLED
COMPRESS_FOR :
DROPPED : NO
SEGMENT_CREATED : YES
INMEMORY : DISABLED
INMEMORY_PRIORITY :
INMEMORY_DISTRIBUTE :
INMEMORY_COMPRESSION :
INMEMORY_DUPLICATE :
EXTERNAL : NO
CELLMEMORY :
INMEMORY_SERVICE :
INMEMORY_SERVICE_NAME :
PL/SQL procedure successfully completed.
SQL>
SQL> select *
2 from user_tab_col_statistics
3 where table_name = 'T'
4 @pr
==============================
TABLE_NAME : T
COLUMN_NAME : SYS_NC_OID$
NUM_DISTINCT : 10
LOW_VALUE : 2A67D00F4BB6466487D27B03585B8AA8
HIGH_VALUE : F299F7493C9249D39E579F62D0CD11CA
DENSITY : .1
NUM_NULLS : 0
NUM_BUCKETS : 1
LAST_ANALYZED : 17-DEC-18
SAMPLE_SIZE : 10
GLOBAL_STATS : YES
USER_STATS : NO
NOTES :
AVG_COL_LEN : 17
HISTOGRAM : NONE
SCOPE : SHARED
==============================
TABLE_NAME : T
COLUMN_NAME : X
NUM_DISTINCT : 10
LOW_VALUE : C102
HIGH_VALUE : C10B
DENSITY : .1
NUM_NULLS : 0
NUM_BUCKETS : 1
LAST_ANALYZED : 17-DEC-18
SAMPLE_SIZE : 10
GLOBAL_STATS : YES
USER_STATS : NO
NOTES :
AVG_COL_LEN : 3
HISTOGRAM : NONE
SCOPE : SHARED
==============================
TABLE_NAME : T
COLUMN_NAME : Y
NUM_DISTINCT : 10
LOW_VALUE : C102
HIGH_VALUE : C10B
DENSITY : .1
NUM_NULLS : 0
NUM_BUCKETS : 1
LAST_ANALYZED : 17-DEC-18
SAMPLE_SIZE : 10
GLOBAL_STATS : YES
USER_STATS : NO
NOTES :
AVG_COL_LEN : 3
HISTOGRAM : NONE
SCOPE : SHARED
PL/SQL procedure successfully completed.
I offer the following hack (I stress - totally unsupported!) that might assist in seeing lock status for object tables. No guarantees on validity or correctness - use at own risk.
SQL> conn / as sysdba
Connected.
SQL>
SQL> create or replace view tmp$V (
2 OWNER
3 ,TABLE_NAME
4 ,PARTITION_NAME
5 ,PARTITION_POSITION
6 ,SUBPARTITION_NAME
7 ,SUBPARTITION_POSITION
8 ,OBJECT_TYPE
9 ,NUM_ROWS
10 ,BLOCKS
11 ,EMPTY_BLOCKS
12 ,AVG_SPACE
13 ,CHAIN_CNT
14 ,AVG_ROW_LEN
15 ,AVG_SPACE_FREELIST_BLOCKS
16 ,NUM_FREELIST_BLOCKS
17 ,AVG_CACHED_BLOCKS
18 ,AVG_CACHE_HIT_RATIO
19 ,IM_IMCU_COUNT
20 ,IM_BLOCK_COUNT
21 ,IM_STAT_UPDATE_TIME
22 ,SCAN_RATE
23 ,SAMPLE_SIZE
24 ,LAST_ANALYZED
25 ,GLOBAL_STATS
26 ,USER_STATS
27 ,STATTYPE_LOCKED
28 ,STALE_STATS
29 ,SCOPE
30 ) as
31 SELECT /* TABLES */
32 u.name, o.name, NULL, NULL, NULL, NULL, 'TABLE', t.rowcnt,
33 decode(bitand(t.property, 64), 0, t.blkcnt, TO_NUMBER(NULL)),
34 decode(bitand(t.property, 64), 0, t.empcnt, TO_NUMBER(NULL)),
35 decode(bitand(t.property, 64), 0, t.avgspc, TO_NUMBER(NULL)),
36 t.chncnt, t.avgrln, t.avgspc_flb,
37 decode(bitand(t.property, 64), 0, t.flbcnt, TO_NUMBER(NULL)),
38 ts.cachedblk, ts.cachehit, ts.im_imcu_count, ts.im_block_count,
39 ts.im_stat_update_time, ts.scanrate, t.samplesize, t.analyzetime,
40 decode(bitand(t.flags, 512), 0, 'NO', 'YES'),
41 decode(bitand(t.flags, 256), 0, 'NO', 'YES'),
42 decode(bitand(t.trigflag, 67108864) + bitand(t.trigflag, 134217728),
43 0, NULL, 67108864, 'DATA', 134217728, 'CACHE', 'ALL'),
44 case
45 when t.analyzetime is null then null
46 when (dbms_stats_internal.is_stale(t.obj#, null,
47 null,
48 (m.inserts + m.deletes + m.updates),
49 t.rowcnt, m.flags) > 0) then 'YES'
50 else 'NO'
51 end,
52 'SHARED'
53 FROM
54 sys.user$ u, sys.obj$ o, sys.tab$ t, sys.tab_stats$ ts, sys.mon_mods_v m
55 WHERE
56 o.owner# = u.user#
57 and o.obj# = t.obj#
58 --and bitand(t.property, 1) = 0 /* not a typed table */
59 and o.obj# = ts.obj# (+)
60 and t.obj# = m.obj# (+)
61 and o.subname IS NULL
62 and o.namespace = 1 and o.remoteowner IS NULL and o.linkname IS NULL
63 and bitand(o.flags, 128) = 0 -- not in recycle bin
64 /
View created.
SQL>
SQL> select * from sys.tmp$v
2 where table_name = 'T'
3 and owner = 'MCDONAC'
4 @pr
==============================
OWNER : MCDONAC
TABLE_NAME : T
PARTITION_NAME :
PARTITION_POSITION :
SUBPARTITION_NAME :
SUBPARTITION_POSITION :
OBJECT_TYPE : TABLE
NUM_ROWS : 10
BLOCKS : 5
EMPTY_BLOCKS : 0
AVG_SPACE : 0
CHAIN_CNT : 0
AVG_ROW_LEN : 23
AVG_SPACE_FREELIST_BLOCKS : 0
NUM_FREELIST_BLOCKS : 0
AVG_CACHED_BLOCKS :
AVG_CACHE_HIT_RATIO :
IM_IMCU_COUNT :
IM_BLOCK_COUNT :
IM_STAT_UPDATE_TIME :
SCAN_RATE :
SAMPLE_SIZE : 10
LAST_ANALYZED : 17-DEC-18
GLOBAL_STATS : YES
USER_STATS : NO
STATTYPE_LOCKED :
STALE_STATS : NO
SCOPE : SHARED
PL/SQL procedure successfully completed.
SQL>
SQL> exec dbms_stats.lock_table_stats('MCDONAC','T');
PL/SQL procedure successfully completed.
SQL>
SQL> select * from sys.tmp$v
2 where table_name = 'T'
3 and owner = 'MCDONAC'
4 @pr
==============================
OWNER : MCDONAC
TABLE_NAME : T
PARTITION_NAME :
PARTITION_POSITION :
SUBPARTITION_NAME :
SUBPARTITION_POSITION :
OBJECT_TYPE : TABLE
NUM_ROWS : 10
BLOCKS : 5
EMPTY_BLOCKS : 0
AVG_SPACE : 0
CHAIN_CNT : 0
AVG_ROW_LEN : 23
AVG_SPACE_FREELIST_BLOCKS : 0
NUM_FREELIST_BLOCKS : 0
AVG_CACHED_BLOCKS :
AVG_CACHE_HIT_RATIO :
IM_IMCU_COUNT :
IM_BLOCK_COUNT :
IM_STAT_UPDATE_TIME :
SCAN_RATE :
SAMPLE_SIZE : 10
LAST_ANALYZED : 17-DEC-18
GLOBAL_STATS : YES
USER_STATS : NO
STATTYPE_LOCKED : ALL
STALE_STATS : NO
SCOPE : SHARED
PL/SQL procedure successfully completed.
SQL>
SQL>
SQL>