Consider we are have a table name mytable, which has a lot of columns and many of them have null values. We can get information about the table using the Oracle built-in namespace.
USER_TAB_COLUMNS describes the columns of the tables, views, and clusters owned by the current user. Its columns (except for
OWNER) are the same as those in ALL_TAB_COLUMNS. Columns
- TABLE_NAME -Table,view or cluster name.
- COLUMN_NAME – Column name.
- DATA_TYPE -Datatype of the column.
- DATA_TYPE_MOD – Datatype modifier of the column.
- DATA_TYPE_OWNER – Owner of the datatype of the column.
- DATA_LENGTH – Length of the column in bytes.
- DATA_PRECISION – Length: decimal digits (NUMBER) or binary digits (FLOAT).
- DATA_SCALE – Digits to right of decimal point in a number.
- NULLABLE – Does column allow NULL values?
- COLUMN_ID – Sequence number of the column as created.
- DEFAULT_LENGTH – Length of default value for the column.
- DATA_DEFAULT – Default value for the column.
- NUM_DISTINCT – The number of distinct values in the column.
- LOW_VALUE – The low value in the column.
- HIGH_VALUE – The high value in the column.
- DENSITY – The density of the column.
- NUM_NULLS – The number of nulls in the column.
- NUM_BUCKETS – The number of buckets in histogram for the column.
- LAST_ANALYZED – The date of the most recent time this column was analyzed.
- SAMPLE_SIZE – The sample size used in analyzing this column.
- CHARACTER_SET_NAME – Character set name.
- CHAR_COL_DECL_LENGTH – Declaration length of character type column.
- GLOBAL_STATS – Are the statistics calculated without merging underlying partitions?
- USER_STATS – Were the statistics entered directly by the user?
- AVG_COL_LEN – The average length of the column in bytes.
- CHAR_LENGTH – The maximum length of the column in characters.
- CHAR_USED – C is maximum length given in characters,B if in bytes.
- V80_FMT_IMAGE – Is column data in 8.0 image format?
- DATA_UPGRADED – Has column data been upgraded to the latest type version format?
- HIDDEN_COLUMN – The column exists in the table but cannot be selected. (mostly for internal use)
- VIRTUAL_COLUMN – The column is an Oracle 11g Virtual column.
SELECT t.column_name FROM user_tab_columns t WHERE t.nullable = 'Y' AND t.table_name = 'YOUR_TABLE_NAME' AND t.num_distinct = 0