Frage

Wenn Sie eine Spalte des Typs NUMBER in Oracle erstellen, haben Sie die Möglichkeit, nicht eine Genauigkeit oder Skala angeben. Was dieser Standard tun, wenn Sie sie nicht angeben?

War es hilfreich?

Lösung

NUMBER (Genauigkeit, Skala)

Wenn eine Genauigkeit nicht angegeben, Werte die Spalte speichert als angegeben. Wenn kein Maßstab angegeben wird, ist die Waage Null.

Viel mehr Infos unter:

http://download.oracle. com / docs / cd / B28359_01 / server.111 / b28318 / datatype.htm # CNCPT1832

Andere Tipps

Der NUMBER Typ kann in verschiedene Stile

                Resulting  Resulting  Precision
Specification   Precision  Scale      Check      Comment
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
NUMBER          NULL       NULL       NO         'maximum range and precision',
                                                 values are stored 'as given'
NUMBER(P, S)    P          S          YES        Error code: ORA-01438
NUMBER(P)       P          0          YES        Error code: ORA-01438
NUMBER(*, S)    38         S          NO

Wenn die Genauigkeit der Gesamtzahl der Stellen und Maßstab ist die Anzahl der Ziffern rechts oder links (negative Skala) von dem Komma.

Oracle gibt ORA-01438 als

  

Wert, der größer als die angegebene Genauigkeit für diese Spalte erlaubt

Wie in der Tabelle angegeben, ist diese Integritätsprüfung nur dann aktiv, wenn die Genauigkeit wird explizit angegeben. Ansonsten geräuschlos Oracle rundet die eingefügt oder aktualisiert einige nicht näher bezeichnete Methode Wert verwendet wird.

Ich glaube, die Standardgenauigkeit 38 ist, Standard-Skala ist gleich Null. Allerdings ist die tatsächliche Größe einer Instanz dieser Spalte ist dynamisch. Es wird so viel Platz in Anspruch nehmen, wie erforderlich, um den Wert zu speichern, oder max 21 Byte.

Oracle speichern Zahlen in der folgenden Art und Weise:. 1 byte für Strom, 1 byte zum ersten Mantisse digit (dh ein vor dem Separator), der Rest für die anderen Ziffern

Mit dem digits hier Oracle bedeutet centesimal digits (i. E. base 100)

SQL> INSERT INTO t_numtest VALUES (LPAD('9', 125, '9'))
  2  /

1 row inserted

SQL> INSERT INTO t_numtest VALUES (LPAD('7', 125, '7'))
  2  /

1 row inserted

SQL> INSERT INTO t_numtest VALUES (LPAD('9', 126, '9'))
  2  /

INSERT INTO t_numtest VALUES (LPAD('9', 126, '9'))

ORA-01426: numeric overflow

SQL> SELECT DUMP(num) FROM t_numtest;

DUMP(NUM)
--------------------------------------------------------------------------------
Typ=2 Len=2: 255,11
Typ=2 Len=21: 255,8,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,79

Wie wir sehen können, hier die maximale Anzahl ist 7.(7) * 10^124, und er 19 centesimal Ziffern für Präzision, oder 38 Dezimalstellen hat.

Eigentlich kann man immer testen Sie es selbst.

CREATE TABLE CUSTOMERS ( CUSTOMER_ID NUMBER NOT NULL, JOIN_DATE DATE NOT NULL, CUSTOMER_STATUS VARCHAR2(8) NOT NULL, CUSTOMER_NAME VARCHAR2(20) NOT NULL, CREDITRATING VARCHAR2(10) ) ;

select column_name, data_type, nullable, data_length, data_precision, data_scale from user_tab_columns where table_name ='CUSTOMERS';

ich erweitern auf Spektren Antwort, damit die Leute es nicht für sich selbst versuchen.

Dies erfolgte auf Oracle Database 11g Express Edition Veröffentlichung 11.2.0.2.0. - Herstellung

CREATE TABLE CUSTOMERS
(
  CUSTOMER_ID NUMBER NOT NULL,
  FOO FLOAT NOT NULL,
  JOIN_DATE DATE NOT NULL,
  CUSTOMER_STATUS VARCHAR2(8) NOT NULL,
  CUSTOMER_NAME VARCHAR2(20) NOT NULL,
  CREDITRATING VARCHAR2(10)
);

select column_name, data_type, nullable, data_length, data_precision, data_scale
from user_tab_columns where table_name ='CUSTOMERS'; 

Was ergibt

COLUMN_NAME      DATA_TYPE  NULLABLE DATA_LENGTH DATA_PRECISION DATA_SCALE
CUSTOMER_ID      NUMBER     N        22        
FOO              FLOAT      N        22          126    
JOIN_DATE        DATE       N        7        
CUSTOMER_STATUS  VARCHAR2   N        8        
CUSTOMER_NAME    VARCHAR2   N        20        
CREDITRATING     VARCHAR2   Y        10    
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top