I'd say it's a historical reflection.
Before true "virtual" columns were a feature, when you did things like set a column unused, or added a function based index, a virtual column would be created for you (and would be hidden). The documentation is probably a reference to that and has not been updated for real virtual columns.
For example
SQL> create table t as
2 select owner,object_id,object_name
3 from all_objects
4 where rownum <=1000;
SQL> alter table t add x generated always as (upper(object_name));
SQL> create index t_idx on t(object_name);
SQL> create index t_idx2 on t ( object_id+10 );
SQL> set feedback on
SQL> set linesize 71
SQL> desc T
Name Null? Type
----------------------------------- -------- -------------------------
OWNER NOT NULL VARCHAR2(30)
OBJECT_ID NOT NULL NUMBER
OBJECT_NAME NOT NULL VARCHAR2(30)
X VARCHAR2(30)
SQL> set linesize 151
SQL> select table_name,column_name,histogram
2 from user_tab_col_statistics
3 where table_name ='T';
no rows selected
SQL>
SQL> begin
2 dbms_stats.gather_table_stats(
3 ownname=>user,
4 tabname=>'T',
5 method_opt=>'for all hidden columns size 1');
6 end;
7 /
PL/SQL procedure successfully completed.
SQL> select table_name,column_name,histogram
2 from user_tab_col_statistics
3 where table_name ='T';
TABLE_NAME COLUMN_NAME HISTOGRAM
------------------------------ ------------------------------ ---------------
T SYS_NC00005$ NONE
1 row selected.
Click on the fSQL> create table t as
2 select owner,object_id,object_name
3 from all_objects
4 where rownum <=1000;
SQL> alter table t add x generated always as (upper(object_name));
SQL> create index t_idx on t(object_name);
SQL> create index t_idx2 on t ( object_id+10 );
SQL> set feedback on
SQL> set linesize 71
SQL> desc T
Name Null? Type
----------------------------------- -------- -------------------------
OWNER NOT NULL VARCHAR2(30)
OBJECT_ID NOT NULL NUMBER
OBJECT_NAME NOT NULL VARCHAR2(30)
X VARCHAR2(30)
SQL> set linesize 151
SQL> select table_name,column_name,histogram
2 from user_tab_col_statistics
3 where table_name ='T';
no rows selected
SQL>
SQL> begin
2 dbms_stats.gather_table_stats(
3 ownname=>user,
4 tabname=>'T',
5 method_opt=>'for all hidden columns size 1');
6 end;
7 /
PL/SQL procedure successfully completed.
SQL> select table_name,column_name,histogram
2 from user_tab_col_statistics
3 where table_name ='T';
TABLE_NAME COLUMN_NAME HISTOGRAM
------------------------------ ------------------------------ ---------------
T SYS_NC00005$ NONE
1 row selected.
<code>
Since your column X is not hidden, stats are not being calculated. Please use the "Feedback" link on the online docs to let the doc team know.