2016-12-07 7 views
0

Ich möchte die Spaltennamen und Datentypen und deren Datentyp der Länge .as BeispielDifferenz von NUMBER identifizieren (5) und NUMBER (8,2) USER_TAB_COLUMNS

erhalten, wenn es eine Tabelle

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

ist ich brauche so etwas wie in some_column separat Nummer (5) zu identifizieren, ist für eine ganze Zahl und Zahl (8,2) ist für einen Desimal Wert ...

ich habe versucht, diese

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

aber Daten_Länge gibt mir die Länge in Byte, damit ich nicht herausfinden kann, wenn es ein Fall wie die Nummer (5), Zahl (8,2) ist .. was ich brauche, ist wie somthing unter

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

Hilfe?

Antwort

1

Es gibt data_precision und data_scale Spalten gibt.
Bitte nehmen Sie sich einen Blick auf dieses Beispiel:

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


Um Sie Primärschlüsselspalten finden müssen zwei Wörterbuch Ansichten verbinden, finden Sie im folgenden Beispiel:

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 
+0

Dank für die response..this war, was ich wanted.can Sie sagen Sie mir, ist es eine Möglichkeit, diese Spalten sind ein Primärschlüssel zu erhalten oder nicht – Noah

+0

ich die Antwort mit einem Beispiel aktualisiert haben, wie Primärschlüsselspalten finden – krokodilko

0

Wenn dies nur für Geetting Informationen drücken Sie dann ALT + F1 nur auf den Namen der Tabelle, diese Sie die Namen der Spalten mit Länge und Datentypen zeigen.

0

Warum nicht y ou versuchen SELECT * FROM information_schema.columns?

Es hat Spalten "table_schema, table_name, column_name, ORDINAL_POSITION, IS_NULLABLE, data_type, character_maximum_length, CHARACTER_OCTET_LENGTH, NUMERIC_PRECISION, numeric_scale, datetime_precision" usw.