identify difference from NUMBER(5) and NUMBER(8,2) USER_TAB_COLUMNS

你说的曾经没有我的故事 提交于 2020-03-16 09:04:48

问题


I want to get the columns names and datatype and its datatype's length .as example

if there is a table

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

I need something like in some_column to identify separately number(5) is for an integer and number(8,2) is for a desimal value...

I tried this

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

but this data_length gives me the length in byte so I can't figure out when there is a case like number(5) ,number(8,2)..what I need is like somthing below

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

help?


回答1:


There are data_precision and data_scale columns there.
Please take a look at this example:

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

EDIT


To find primary key columns you need to join two dictionary views, please see the below example:

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:


If this is only for Geetting information then just Press ALT+F1 on the name of the table this will show you the names of the columns with length and data types.




回答3:


Why don't you try SELECT * FROM information_schema.columns ?

It has 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", etc.



来源:https://stackoverflow.com/questions/41010349/identify-difference-from-number5-and-number8-2-user-tab-columns

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!