As far as I can tell, the Oracle docs don't define "hidden columns" as well as they could.
In a related post, @mathguy said it well:
Difference between hidden and invisible columns?
The documentation refers to "hidden" columns in many places, but it does not appear to define the concept.
For example, the documentation for CREATE TABLE says that invisible columns are user-specified hidden columns; and it mentions "hidden columns" eight times (including this reference related to invisible columns) but never defines "hidden".
I assume (speculate) that hidden columns existed before version 12 which introduced invisible columns. Before invisible columns, hidden columns were system-generated, and we didn't have to worry about them (we couldn't manipulate them ourselves), so Oracle didn't need to worry about defining the concept. That should have changed, though, when they introduced invisible columns, and defined them as user-specified hidden columns.
There are some clear differences between system-generated hidden columns (however defined) and invisible columns, which are user-defined. For example, you can specify an invisible column as either nullable or non-nullable. You can't do this with system-generated hidden columns (again: whatever that means). You can assign (INSERT) or reassign (UPDATE) values to an invisible column - you just need to name the column explicitly in the INSERT statement; you can't assign values to a system-generated column.
Could the docs be improved so that they clearly define hidden columns, and explain what the difference is between hidden columns and invisible columns?
Thanks.