您如何访问 SELECT Data_Type 的比例和精度?

How do you access or SELECT Scale and Precision of a Data_Type?

我正在尝试打印来自 SQL 开发人员的报告。当我 SELECT Data_Type 时,我得到了预期的数据类型,但我希望 Scale 和 Precision 也在它旁边......例如

CHAR(3, 0)
NUMBER(7, 0)

现在我只获取数据类型本身,例如:

CHAR
NUMBER

我缺少什么语法来访问或 SELECT 比例和精度?

如果您要“选择”数据类型,我假设您是从 all_tab_columns 之类的东西中“选择”。正确的?像这样:

select column_name, data_type
from   all_tab_columns
where  owner = 'SCOTT' and table_name = 'EMP'
;

COLUMN_NAME  DATA_TYPE   
------------ ------------
EMPNO        NUMBER      
ENAME        VARCHAR2    
JOB          VARCHAR2    
MGR          NUMBER      
HIREDATE     DATE        
SAL          NUMBER      
COMM         NUMBER      
DEPTNO       NUMBER   

现在,您想知道 VARCHAR2 列的最大长度,以及 NUMBER 的精度和小数位数,对吗?

select 添加更多列。像这样:

select column_name, data_type, char_col_decl_length, data_precision, data_scale
from   all_tab_columns
where  owner = 'SCOTT' and table_name = 'EMP'
;

COLUMN_NAME  DATA_TYPE    CHAR_COL_DECL_LENGTH DATA_PRECISION DATA_SCALE
------------ ------------ -------------------- -------------- ----------
EMPNO        NUMBER                                         4          0
ENAME        VARCHAR2                       10                          
JOB          VARCHAR2                        9                          
MGR          NUMBER                                         4          0
HIREDATE     DATE                                                       
SAL          NUMBER                                         7          2
COMM         NUMBER                                         7          2
DEPTNO       NUMBER                                         2          0

或者,在 SQL*Plus(或实现其功能的其他接口)中,您可以使用 SQL*Plus 命令 describe:

describe scott.emp

Name     Null? Type         
-------- ----- ------------ 
EMPNO          NUMBER(4)    
ENAME          VARCHAR2(10) 
JOB            VARCHAR2(9)  
MGR            NUMBER(4)    
HIREDATE       DATE         
SAL            NUMBER(7,2)  
COMM           NUMBER(7,2)  
DEPTNO         NUMBER(2)  

很可能,SQL*Plus 会使用 select 查询实现自己的 describe 命令,就像我之前分享的那样。

为什么不直接用

描述table
   Desc tablename 

或者

  Describe tablename