识别NUMBER(5)和NUMBER(8,2)USER_TAB_COLUMNS之间的差异

时间:2016-12-07 05:53:25

标签: sql database oracle sqldatatypes

我想获取列名称和数据类型及其数据类型的长度。例如

如果有桌子

SQL> create table TestTable(
  2    ID                 VARCHAR2(4)         NOT NULL,
  3    CODE               Number(5),
  4    MyDate             DATE,
  5    MyNumber           Number(8,2))

我需要像some_column中的东西来分别识别数字(5)是一个整数而数字(8,2)是一个是否为一个值...

我试过这个

SELECT column_name, data_type, data_length FROM USER_TAB_COLUMNS WHERE table_name = 'some_table'

但是这个data_length给出了字节长度,所以我不知道什么时候有数字(5),数字(8,2)......我需要的就像下面的东西

TABLE_NAME                     COLUMN_NAME                    DATA_TYPE    some_column
------------------------------ ------------------------------ --------------------------
TESTTABLE                      ID                             VARCHAR2         4
TESTTABLE                      MYNAME                         VARCHAR2         5
TESTTABLE                      MYDATE                         DATE             -
TESTTABLE                      MYNUMBER                       NUMBER          8,2

帮助?

3 个答案:

答案 0 :(得分:1)

那里有data_precisiondata_scale列 请看一下这个例子:

create table qwer(
  x number,
  y number(8,2),
  z number(5,0),
  a int,
  b decimal(5,3)
);

SELECT column_name, data_type, data_precision, data_scale
FROM USER_TAB_COLUMNS
WHERE Table_name = 'QWER'
;

COLUMN_NAME   DATA_TYPE DATA_PRECISION DATA_SCALE
------------- --------- -------------- ----------
B             NUMBER     5             3
A             NUMBER
X             NUMBER         
Y             NUMBER     8             2
Z             NUMBER     5             0

修改

要查找您需要加入两个字典视图的主键列,请参阅以下示例:

CREATE TABLE pk1(
  id int primary key,
  name varchar2(10)
);

CREATE TABLE pk2(
  id int ,
  pk1 number(10,0),
  pk2 varchar2(5),
  name varchar2(10),
  constraint my_composite_pk primary key (id, pk1, pk2 )
);

SELECT c.table_name, cols.column_name, cols.position 
FROM user_constraints c
JOIN USER_CONS_COLUMNS cols
USING ( CONSTRAINT_NAME )
WHERE c.table_name IN ('PK1', 'PK2' )
  and c.constraint_type = 'P' /* P - means PRIMARY KEY */
ORDER BY 1,3
; 

TABLE_NAME COLUMN_NAME   POSITION
---------- ----------- ----------
PK1        ID                   1
PK2        ID                   1
PK2        PK1                  2
PK2        PK2                  3

答案 1 :(得分:0)

如果仅用于Geetting信息,则只需按表格名称上的ALT + F1,这将显示具有长度和数据类型的列的名称。

答案 2 :(得分:0)

为什么不尝试SELECT * FROM information_schema.columns?

它包含列" table_schema,table_name,column_name,ordinal_position,is_nullable,data_type,character_maximum_length,character_octet_length,numeric_precision,numeric_scale,datetime_precision"等。