2017-12-17 3 views
0

Ich versuche, die folgende Anweisung in Oracle SQL Developer einzufügen:Was mache ich falsch mit meiner Zahlenpräzision und Skalierung?

INSERT INTO ACC 
VALUES (1245890, 234.50, 'Broomhill', '15-NOV-2003', 100.00); 

Die Aussage, ohne einen Fehler gut genug einfügt, aber ich merkte, wenn sich die Daten ansehen suchen, dass die Zeile zeigt die 2. und 4. Werte mit einem Dezimalpunkt weniger.

(z 234,5 und 100,0, wenn es sollen 234.50 und 100.00 sein)

Ich habe versucht, die Genauigkeit und Maßstab in meinem Tisch zu erhöhen Code erstellen, um es zu erlauben, korrekt angezeigt werden.

CREATE TABLE ACC 
(
"ACCNO" NUMBER(7), 
"BALANCE" NUMBER(5,2), 
"BRANCH" VARCHAR(15), 
"OPENED" DATE, 
"BONUS" NUMBER(5,2) 
); 

änderte ich das Gleichgewicht und die BONUS-Datentypen leicht

CREATE TABLE ACC 
(
"ACCNO" NUMBER(7), 
"BALANCE" NUMBER(5,3) 
"BRANCH" VARCHAR(15), 
"OPENED" DATE, 
"BONUS" NUMBER(5,3) 
); 

sondern erhalte ich eine Fehlermeldung, dass:

Error starting at line : 94 in command - 
INSERT INTO ACC 
VALUES (1245890, 234.50, 'Broomhill', '15-NOV-2003', 100.00) 
Error report - 
ORA-01438: value larger than specified precision allowed for this column 

Was soll ich mit meinem Code falsch? Wie kann ich es schreiben, damit es meine Werte richtig anzeigt?

+0

Die Standard-Antwort ist, dass dies eine Formatierung Problem ist, dass der Code _accessing_ Ihre Daten zu tun haben sollte. Was gespeichert ist, ist die notwendige Information, damit Sie die Daten beliebig formatieren können. – Ben

+0

Ist diese Zahl Geld? Wenn ja, überprüfen Sie hier: https://stackoverflow.com/questions/29014283/sql-datatype-to-use-when-inserting-money –

+0

Übrigens sollten Datum Literale wie "Datum" 2003-11-03 geschrieben werden "". –

Antwort

3

NUMBER(5, 3) ist eine Zahl, die fünf Ziffern enthält, mit drei rechts von der Dezimalstelle - so zwei sind auf der linken Seite. Der Wert "100.00" hat drei nach links, also passt es nicht.

Sie scheinen zu wollen: NUMBER(6, 3).

+0

Es wird 100,00 richtig angezeigt, aber 234,50 wird immer noch als 234,5 angezeigt. –

+0

@HenryGreen Die fehlende Null ist nicht _significant_, was bedeutet, dass wir wirklich eine beliebige Anzahl von Nullen rechts von '.5' schreiben könnten und die logische Bedeutung nicht ändern würde der Nummer. Sie können dies mit einer Formatierungsfunktion in Oracle umgehen, oder besser noch in Ihrer Präsentationsebene. –

+0

Aber es gibt einen entscheidenden Unterschied zwischen 234,50 und 234,5. Diese zusätzliche 0 wird benötigt, um das hervorzuheben, ich bin mir nicht sicher, wie ich die Formatierungsfunktion verwenden soll, um das anzuzeigen. –

2

Zahlen werden korrekt in einer Tabelle gespeichert, aber sie werden nicht wie gewünscht angezeigt, daher müssen Sie eine geeignete Formatmaske verwenden. Hier ein Beispiel:

SQL> select to_char(234.50, '990D00') val_1, 
    2   to_char(100, '990D00') val_2 
    3 from dual; 

VAL_1 VAL_2 
------- ------- 
234,50 100,00 

SQL> 

Dies ist SQL * Plus; Sie können es in anderen (Oracle) Werkzeugen, wie z. B. Forms, Reports, Apex usw., normalerweise im Fenster Eigenschaftenfenster des Elements festlegen.

Hier finden Sie aktuelle Format-Modelle, https://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements004.htm