首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >区别于数字(5)和数字(8,2) USER_TAB_COLUMNS

区别于数字(5)和数字(8,2) USER_TAB_COLUMNS
EN

Stack Overflow用户
提问于 2016-12-07 05:53:24
回答 3查看 86关注 0票数 0

我想获得列名和数据类型及其数据类型的长度.as示例

如果有一张桌子

代码语言:javascript
复制
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)代表悲观值.

我试过这个

代码语言:javascript
复制
SELECT column_name, data_type, data_length FROM USER_TAB_COLUMNS WHERE table_name = 'some_table'

但是这个data_length给我的长度是字节,所以我不知道在什么情况下,像数字(5),数字(8,2)..what是像下面的一些东西

代码语言:javascript
复制
TABLE_NAME                     COLUMN_NAME                    DATA_TYPE    some_column
------------------------------ ------------------------------ --------------------------
TESTTABLE                      ID                             VARCHAR2         4
TESTTABLE                      MYNAME                         VARCHAR2         5
TESTTABLE                      MYDATE                         DATE             -
TESTTABLE                      MYNUMBER                       NUMBER          8,2

帮助?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-12-07 06:11:52

那里有data_precisiondata_scale列。

请看一下这个例子:

代码语言:javascript
复制
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

编辑

要查找主键列,您需要连接两个字典视图,请参见下面的示例:

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2016-12-07 06:06:37

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

票数 0
EN

Stack Overflow用户

发布于 2016-12-07 06:28:22

为什么不尝试从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“等栏目。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41010349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档