How do I get column datatype in Oracle with PL-SQL with low privileges? How do I get column datatype in Oracle with PL-SQL with low privileges? oracle oracle

How do I get column datatype in Oracle with PL-SQL with low privileges?


ALL_TAB_COLUMNS should be queryable from PL/SQL. DESC is a SQL*Plus command.

SQL> desc all_tab_columns; Name                                      Null?    Type ----------------------------------------- -------- ---------------------------- OWNER                                     NOT NULL VARCHAR2(30) TABLE_NAME                                NOT NULL VARCHAR2(30) COLUMN_NAME                               NOT NULL VARCHAR2(30) DATA_TYPE                                          VARCHAR2(106) DATA_TYPE_MOD                                      VARCHAR2(3) DATA_TYPE_OWNER                                    VARCHAR2(30) DATA_LENGTH                               NOT NULL NUMBER DATA_PRECISION                                     NUMBER DATA_SCALE                                         NUMBER NULLABLE                                           VARCHAR2(1) COLUMN_ID                                          NUMBER DEFAULT_LENGTH                                     NUMBER DATA_DEFAULT                                       LONG NUM_DISTINCT                                       NUMBER LOW_VALUE                                          RAW(32) HIGH_VALUE                                         RAW(32) DENSITY                                            NUMBER NUM_NULLS                                          NUMBER NUM_BUCKETS                                        NUMBER LAST_ANALYZED                                      DATE SAMPLE_SIZE                                        NUMBER CHARACTER_SET_NAME                                 VARCHAR2(44) CHAR_COL_DECL_LENGTH                               NUMBER GLOBAL_STATS                                       VARCHAR2(3) USER_STATS                                         VARCHAR2(3) AVG_COL_LEN                                        NUMBER CHAR_LENGTH                                        NUMBER CHAR_USED                                          VARCHAR2(1) V80_FMT_IMAGE                                      VARCHAR2(3) DATA_UPGRADED                                      VARCHAR2(3) HISTOGRAM                                          VARCHAR2(15)


You can use the desc command.

desc MY_TABLE

This will give you the column names, whether null is valid, and the datatype (and length if applicable)


The best solution that I've found for such case is

select column_name, data_type||casewhen data_precision is not null and nvl(data_scale,0)>0 then '('||data_precision||','||data_scale||')'when data_precision is not null and nvl(data_scale,0)=0 then '('||data_precision||')'when data_precision is null and data_scale is not null then '(*,'||data_scale||')'when char_length>0 then '('||char_length|| case char_used                                                          when 'B' then ' Byte'                                                         when 'C' then ' Char'                                                         else null                                            end||')'end||decode(nullable, 'N', ' NOT NULL')from user_tab_columnswhere table_name = 'TABLE_NAME'and column_name = 'COLUMN_NAME';

@Aaron Stainback, thank you for correction!